xref: /aosp_15_r20/external/spdx-tools/tvloader/parser2v3/parse_review.go (revision ba677afa8f67bb56cbc794f4d0e378e0da058e16)
1// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
2
3package parser2v3
4
5import (
6	"fmt"
7
8	"github.com/spdx/tools-golang/spdx/v2_3"
9)
10
11func (parser *tvParser2_3) parsePairFromReview2_3(tag string, value string) error {
12	switch tag {
13	// tag for creating new review section
14	case "Reviewer":
15		parser.rev = &v2_3.Review{}
16		parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
17		subkey, subvalue, err := extractSubs(value)
18		if err != nil {
19			return err
20		}
21		switch subkey {
22		case "Person":
23			parser.rev.Reviewer = subvalue
24			parser.rev.ReviewerType = "Person"
25		case "Organization":
26			parser.rev.Reviewer = subvalue
27			parser.rev.ReviewerType = "Organization"
28		case "Tool":
29			parser.rev.Reviewer = subvalue
30			parser.rev.ReviewerType = "Tool"
31		default:
32			return fmt.Errorf("unrecognized Reviewer type %v", subkey)
33		}
34	case "ReviewDate":
35		parser.rev.ReviewDate = value
36	case "ReviewComment":
37		parser.rev.ReviewComment = value
38	// for relationship tags, pass along but don't change state
39	case "Relationship":
40		parser.rln = &v2_3.Relationship{}
41		parser.doc.Relationships = append(parser.doc.Relationships, parser.rln)
42		return parser.parsePairForRelationship2_3(tag, value)
43	case "RelationshipComment":
44		return parser.parsePairForRelationship2_3(tag, value)
45	// for annotation tags, pass along but don't change state
46	case "Annotator":
47		parser.ann = &v2_3.Annotation{}
48		parser.doc.Annotations = append(parser.doc.Annotations, parser.ann)
49		return parser.parsePairForAnnotation2_3(tag, value)
50	case "AnnotationDate":
51		return parser.parsePairForAnnotation2_3(tag, value)
52	case "AnnotationType":
53		return parser.parsePairForAnnotation2_3(tag, value)
54	case "SPDXREF":
55		return parser.parsePairForAnnotation2_3(tag, value)
56	case "AnnotationComment":
57		return parser.parsePairForAnnotation2_3(tag, value)
58	default:
59		return fmt.Errorf("received unknown tag %v in Review section", tag)
60	}
61
62	return nil
63}
64