Skip to content

Commit

Permalink
Use Updated ExternalDocumentRef For RDFLoader
Browse files Browse the repository at this point in the history
 - ExternalDocumentRef is now a struct instead of a coalesced string
 - Also, added dependency of github.com/spdx/gordf in go.mod file

Signed-off-by: Rishabh Bhatnagar <bhatnagarrishabh4@gmail.com>
  • Loading branch information
RishabhBhatnagar committed Nov 12, 2020
1 parent 5896dba commit 20e0683
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 13 deletions.
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
module github.com/spdx/tools-golang

go 1.13

require github.com/spdx/gordf v0.0.0-20201111095634-7098f93598fb
24 changes: 12 additions & 12 deletions rdfloader/parser2v2/parse_spdx_document.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,12 @@ func (parser *rdfParser2_2) parseSpdxDocumentNode(spdxDocNode *gordfParser.Node)
ci.DocumentName = objectValue
case SPDX_EXTERNAL_DOCUMENT_REF: // 2.6: externalDocumentReferences
// cardinality: min 0
var extRef string
var extRef spdx.ExternalDocumentRef2_2
extRef, err = parser.getExternalDocumentRefFromNode(subTriple.Object)
ci.ExternalDocumentReferences = append(ci.ExternalDocumentReferences, extRef)
if err != nil {
return err
}
ci.ExternalDocumentReferences[extRef.DocumentRefID] = extRef
case SPDX_CREATION_INFO: // 2.7 - 2.10:
// cardinality: exactly 1
err = parser.parseCreationInfoFromNode(ci, subTriple.Object)
Expand Down Expand Up @@ -86,31 +89,28 @@ func (parser *rdfParser2_2) parseSpdxDocumentNode(spdxDocNode *gordfParser.Node)
return nil
}

func (parser *rdfParser2_2) getExternalDocumentRefFromNode(node *gordfParser.Node) (string, error) {
var docID, checksumValue, checksumAlgorithm, spdxDocument string
var err error
func (parser *rdfParser2_2) getExternalDocumentRefFromNode(node *gordfParser.Node) (edr spdx.ExternalDocumentRef2_2, err error) {
for _, triple := range parser.nodeToTriples(node) {
switch triple.Predicate.ID {
case SPDX_EXTERNAL_DOCUMENT_ID:
// cardinality: exactly 1
docID = triple.Object.ID
edr.DocumentRefID = triple.Object.ID
case SPDX_SPDX_DOCUMENT:
// cardinality: exactly 1
// assumption: "spdxDocument" property of an external document
// reference is just a uri which doesn't follow a spdxDocument definition
spdxDocument = triple.Object.ID
edr.URI = triple.Object.ID
case SPDX_CHECKSUM:
// cardinality: exactly 1
checksumAlgorithm, checksumValue, err = parser.getChecksumFromNode(triple.Object)
edr.Alg, edr.Checksum, err = parser.getChecksumFromNode(triple.Object)
if err != nil {
return "", err
return edr, err
}
case RDF_TYPE:
continue
default:
return "", fmt.Errorf("unknown predicate ID (%s) while parsing externalDocumentReference", triple.Predicate.ID)
return edr, fmt.Errorf("unknown predicate ID (%s) while parsing externalDocumentReference", triple.Predicate.ID)
}
}
// transform the variables into string form (same as that of tag-value).
return fmt.Sprintf("%s %s %s: %s", docID, spdxDocument, checksumAlgorithm, checksumValue), nil
return edr, nil
}
4 changes: 3 additions & 1 deletion rdfloader/parser2v2/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ func NewParser2_2(gordfParserObj *gordfParser.Parser, nodeToTriples map[string][
gordfParserObj: gordfParserObj,
nodeStringToTriples: nodeToTriples,
doc: &spdx.Document2_2{
CreationInfo: &spdx.CreationInfo2_2{},
CreationInfo: &spdx.CreationInfo2_2{
ExternalDocumentReferences: map[string]spdx.ExternalDocumentRef2_2{},
},
Packages: map[spdx.ElementID]*spdx.Package2_2{},
UnpackagedFiles: map[spdx.ElementID]*spdx.File2_2{},
OtherLicenses: []*spdx.OtherLicense2_2{},
Expand Down

0 comments on commit 20e0683

Please sign in to comment.