Skip to content

Commit 0b39686

Browse files
committed
Add rdfSaver
Signed-off-by: abhishekspeer <[email protected]>
1 parent 3a7f5f4 commit 0b39686

File tree

14 files changed

+1174
-6
lines changed

14 files changed

+1174
-6
lines changed

v0/rdfloader/rdfloader.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"github.com/spdx/tools-golang/v0/rdfloader/rdf2v1"
88
)
99

10-
func Reader2_1() (rdf2v1.Document, rdf2v1.Snippet, error) {
10+
func Reader2_1() (*rdf2v1.Document, *rdf2v1.Snippet, error) {
1111

1212
args := os.Args
1313
if len(args) != 2 {
@@ -22,14 +22,10 @@ func Reader2_1() (rdf2v1.Document, rdf2v1.Snippet, error) {
2222

2323
input := args[1]
2424
spdxdoc, sp, err = Parse(input)
25-
26-
_, _ = spdxdoc, sp
27-
// var doc2v1 *spdx.Document2_1
28-
// doc2v1 = TransferDocument(spdxdoc, sp)
2925
if err != nil {
3026
fmt.Errorf("Parsing Error")
3127
}
32-
return *spdxdoc, *sp, err
28+
return spdxdoc, sp, err
3329
}
3430

3531
func Parse(input string) (*rdf2v1.Document, *rdf2v1.Snippet, error) {

v0/rdfsaver/rdfsaver.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package rdfsaver
2+
3+
import (
4+
"os"
5+
"tools-golang/v0/rdfsaver/rdfsaver2v1"
6+
7+
"github.com/spdx/tools-golang/v0/rdfloader/rdf2v1"
8+
)
9+
10+
func Saver2_1(spdxdoc *rdf2v1.Document, sp *rdf2v1.Snippet) error {
11+
12+
output := os.Stdout
13+
err := rdfsaver2v1.Write(output, spdxdoc, sp)
14+
return err
15+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package rdfsaver2v1
2+
3+
import (
4+
"github.com/deltamobile/goraptor"
5+
"github.com/spdx/tools-golang/v0/rdfloader/rdf2v1"
6+
)
7+
8+
func (f *Formatter) Annotation(an *rdf2v1.Annotation) (id goraptor.Term, err error) {
9+
id = f.NodeId("an")
10+
11+
if err = f.setNodeType(id, rdf2v1.TypeAnnotation); err != nil {
12+
return
13+
}
14+
// Type 1: add Pairs
15+
err = f.addPairs(id,
16+
Pair{"annotationDate", an.AnnotationDate.Val},
17+
Pair{"rdfs:comment", an.AnnotationComment.Val},
18+
Pair{"annotator", an.Annotator.Val},
19+
)
20+
if err != nil {
21+
return
22+
}
23+
// Type 2: add Pairs with Prefix
24+
if an.AnnotationType.Val != "" {
25+
if err = f.addTerm(id, "annotationType", rdf2v1.Prefix(an.AnnotationType.Val)); err != nil {
26+
return
27+
}
28+
}
29+
return id, err
30+
}
31+
func (f *Formatter) Annotations(parent goraptor.Term, element string, ans []*rdf2v1.Annotation) error {
32+
33+
if len(ans) == 0 {
34+
return nil
35+
}
36+
37+
for _, an := range ans {
38+
annId, err := f.Annotation(an)
39+
if err != nil {
40+
return err
41+
}
42+
if annId == nil {
43+
continue
44+
}
45+
if err = f.addTerm(parent, element, annId); err != nil {
46+
return err
47+
}
48+
}
49+
return nil
50+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package rdfsaver2v1
2+
3+
import (
4+
"strings"
5+
6+
"github.com/spdx/tools-golang/v0/rdfloader/rdf2v1"
7+
8+
"github.com/deltamobile/goraptor"
9+
)
10+
11+
func (f *Formatter) Checksum(cksum *rdf2v1.Checksum) (id goraptor.Term, err error) {
12+
id = f.NodeId("cksum")
13+
14+
if err = f.setNodeType(id, rdf2v1.TypeChecksum); err != nil {
15+
return
16+
}
17+
18+
err = f.addLiteral(id, "checksumValue", cksum.ChecksumValue.Val)
19+
if err != nil {
20+
return
21+
}
22+
23+
algo := strings.ToLower(cksum.Algorithm.Val)
24+
if algo == "sha1" {
25+
err = f.addTerm(id, "algorithm", rdf2v1.Prefix("checksumAlgorithm_sha1"))
26+
27+
} else if algo == "md5" {
28+
err = f.addTerm(id, "algorithm", rdf2v1.Prefix("checksumAlgorithm_md5"))
29+
} else if algo == "sha256" {
30+
err = f.addTerm(id, "algorithm", rdf2v1.Prefix("checksumAlgorithm_sha256"))
31+
} else {
32+
err = f.addLiteral(id, "algorithm", algo)
33+
}
34+
35+
return id, err
36+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package rdfsaver2v1
2+
3+
import (
4+
"github.com/spdx/tools-golang/v0/rdfloader/rdf2v1"
5+
6+
"github.com/deltamobile/goraptor"
7+
)
8+
9+
func (f *Formatter) CreationInfo(ci *rdf2v1.CreationInfo) (id goraptor.Term, err error) {
10+
id = f.NodeId("cri")
11+
12+
if err = f.setNodeType(id, rdf2v1.TypeCreationInfo); err != nil {
13+
return
14+
}
15+
16+
err = f.addPairs(id,
17+
Pair{"created", ci.Create.Val},
18+
Pair{"rdfs:comment", ci.Comment.Val},
19+
Pair{"licenseListVersion", ci.LicenseListVersion.Val},
20+
)
21+
22+
if err != nil {
23+
return
24+
}
25+
26+
for _, creator := range ci.Creator {
27+
if err = f.addLiteral(id, "creator", creator.Val); err != nil {
28+
return
29+
}
30+
}
31+
32+
return id, nil
33+
}
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package rdfsaver2v1
2+
3+
import (
4+
"errors"
5+
6+
"github.com/spdx/tools-golang/v0/rdfloader/rdf2v1"
7+
8+
"github.com/deltamobile/goraptor"
9+
)
10+
11+
func (f *Formatter) Document(doc *rdf2v1.Document) (docId goraptor.Term, err error) {
12+
13+
// _docId := goraptor.Blank("doc")
14+
if doc == nil {
15+
return nil, errors.New("Nil document.")
16+
}
17+
18+
// docId = &_docId
19+
docId = rdf2v1.Blank("doc")
20+
21+
if err = f.setNodeType(docId, rdf2v1.TypeDocument); err != nil {
22+
return
23+
}
24+
25+
if err = f.addLiteral(docId, "specVersion", doc.SPDXVersion.Val); err != nil {
26+
return
27+
}
28+
29+
if doc.DataLicense.Val != "" {
30+
if err = f.addTerm(docId, "dataLicense", rdf2v1.Uri(rdf2v1.LicenseUri+doc.DataLicense.Val)); err != nil {
31+
return
32+
}
33+
}
34+
if doc.DocumentName.Val != "" {
35+
if err = f.addTerm(docId, "name", rdf2v1.Uri(rdf2v1.LicenseUri+doc.DataLicense.Val)); err != nil {
36+
return
37+
}
38+
}
39+
if err = f.addLiteral(docId, "rdfs:comment", doc.DocumentComment.Val); err != nil {
40+
return
41+
}
42+
43+
if id, err := f.CreationInfo(doc.CreationInfo); err == nil {
44+
if err = f.addTerm(docId, "creationInfo", id); err != nil {
45+
return docId, err
46+
}
47+
} else {
48+
return docId, err
49+
}
50+
51+
if id, err := f.License(doc.License); err == nil {
52+
if err = f.addTerm(docId, "dataLicense", id); err != nil {
53+
return docId, err
54+
}
55+
} else {
56+
return docId, err
57+
}
58+
59+
if id, err := f.ExternalDocumentRef(doc.ExternalDocumentRef); err == nil {
60+
if err = f.addTerm(docId, "externalDocumentRef", id); err != nil {
61+
return docId, err
62+
}
63+
} else {
64+
return docId, err
65+
}
66+
if err = f.Relationships(docId, "relationship", doc.Relationship); err != nil {
67+
return
68+
}
69+
70+
if err = f.Reviews(docId, "reviewed", doc.Review); err != nil {
71+
return
72+
}
73+
if err = f.Annotations(docId, "annotation", doc.Annotation); err != nil {
74+
return
75+
}
76+
if err = f.ExtractedLicInfos(docId, "hasExtractedLicensingInfo", doc.ExtractedLicensingInfo); err != nil {
77+
return
78+
}
79+
return docId, nil
80+
}
81+
func (f *Formatter) ExternalDocumentRef(edr *rdf2v1.ExternalDocumentRef) (id goraptor.Term, err error) {
82+
id = f.NodeId("edr")
83+
84+
if err = f.setNodeType(id, rdf2v1.TypeExternalDocumentRef); err != nil {
85+
return
86+
}
87+
88+
err = f.addPairs(id,
89+
Pair{"externalDocumentId", edr.ExternalDocumentId.Val},
90+
Pair{"spdxDocument", edr.SPDXDocument.Val},
91+
)
92+
93+
if err != nil {
94+
return
95+
}
96+
97+
if edr.Checksum != nil {
98+
cksumId, err := f.Checksum(edr.Checksum)
99+
if err != nil {
100+
return id, err
101+
}
102+
if err = f.addTerm(id, "checksum", cksumId); err != nil {
103+
return id, err
104+
}
105+
}
106+
107+
return id, nil
108+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package rdfsaver2v1
2+
3+
import (
4+
"github.com/spdx/tools-golang/v0/rdfloader/rdf2v1"
5+
6+
"github.com/deltamobile/goraptor"
7+
)
8+
9+
func (f *Formatter) ExtractedLicInfo(lic *rdf2v1.ExtractedLicensingInfo) (id goraptor.Term, err error) {
10+
id = f.NodeId("lic")
11+
12+
if err = f.setNodeType(id, rdf2v1.TypeExtractedLicensingInfo); err != nil {
13+
return
14+
}
15+
16+
err = f.addPairs(id,
17+
Pair{"licenseId", lic.LicenseIdentifier.Val},
18+
Pair{"extractedText", lic.ExtractedText.Val},
19+
Pair{"rdfs:comment", lic.LicenseComment.Val},
20+
)
21+
22+
if err != nil {
23+
return
24+
}
25+
26+
for _, name := range lic.LicenseName {
27+
if err = f.addLiteral(id, "name", name.Val); err != nil {
28+
return
29+
}
30+
}
31+
32+
for _, seealso := range lic.LicenseSeeAlso {
33+
if err = f.addLiteral(id, "rdfs:seeAlso", seealso.Val); err != nil {
34+
return
35+
}
36+
}
37+
38+
return id, err
39+
}
40+
41+
func (f *Formatter) ExtractedLicInfos(parent goraptor.Term, element string, lics []*rdf2v1.ExtractedLicensingInfo) error {
42+
43+
if len(lics) == 0 {
44+
return nil
45+
}
46+
47+
for _, lic := range lics {
48+
licId, err := f.ExtractedLicInfo(lic)
49+
if err != nil {
50+
return err
51+
}
52+
if licId == nil {
53+
continue
54+
}
55+
if err = f.addTerm(parent, element, licId); err != nil {
56+
return err
57+
}
58+
}
59+
return nil
60+
}

0 commit comments

Comments
 (0)