1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage parser2v2 4*ba677afaSXin Li 5*ba677afaSXin Liimport ( 6*ba677afaSXin Li "fmt" 7*ba677afaSXin Li 8*ba677afaSXin Li gordfParser "github.com/spdx/gordf/rdfloader/parser" 9*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/common" 10*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/v2_2" 11*ba677afaSXin Li) 12*ba677afaSXin Li 13*ba677afaSXin Li// Cardinality: Mandatory, one. 14*ba677afaSXin Lifunc (parser *rdfParser2_2) parseCreationInfoFromNode(ci *v2_2.CreationInfo, node *gordfParser.Node) error { 15*ba677afaSXin Li for _, triple := range parser.nodeToTriples(node) { 16*ba677afaSXin Li switch triple.Predicate.ID { 17*ba677afaSXin Li case SPDX_LICENSE_LIST_VERSION: // 2.7 18*ba677afaSXin Li // cardinality: max 1 19*ba677afaSXin Li ci.LicenseListVersion = triple.Object.ID 20*ba677afaSXin Li case SPDX_CREATOR: // 2.8 21*ba677afaSXin Li // cardinality: min 1 22*ba677afaSXin Li err := setCreator(triple.Object.ID, ci) 23*ba677afaSXin Li if err != nil { 24*ba677afaSXin Li return err 25*ba677afaSXin Li } 26*ba677afaSXin Li case SPDX_CREATED: // 2.9 27*ba677afaSXin Li // cardinality: exactly 1 28*ba677afaSXin Li ci.Created = triple.Object.ID 29*ba677afaSXin Li case RDFS_COMMENT: // 2.10 30*ba677afaSXin Li ci.CreatorComment = triple.Object.ID 31*ba677afaSXin Li case RDF_TYPE: 32*ba677afaSXin Li continue 33*ba677afaSXin Li default: 34*ba677afaSXin Li return fmt.Errorf("unknown predicate %v while parsing a creation info", triple.Predicate) 35*ba677afaSXin Li } 36*ba677afaSXin Li } 37*ba677afaSXin Li return nil 38*ba677afaSXin Li} 39*ba677afaSXin Li 40*ba677afaSXin Lifunc setCreator(creatorStr string, ci *v2_2.CreationInfo) error { 41*ba677afaSXin Li entityType, entity, err := ExtractSubs(creatorStr, ":") 42*ba677afaSXin Li if err != nil { 43*ba677afaSXin Li return fmt.Errorf("error setting creator of a creation info: %s", err) 44*ba677afaSXin Li } 45*ba677afaSXin Li 46*ba677afaSXin Li creator := common.Creator{Creator: entity} 47*ba677afaSXin Li 48*ba677afaSXin Li switch entityType { 49*ba677afaSXin Li case "Person", "Organization", "Tool": 50*ba677afaSXin Li creator.CreatorType = entityType 51*ba677afaSXin Li default: 52*ba677afaSXin Li return fmt.Errorf("unknown creatorType %v in a creation info", entityType) 53*ba677afaSXin Li } 54*ba677afaSXin Li 55*ba677afaSXin Li ci.Creators = append(ci.Creators, creator) 56*ba677afaSXin Li 57*ba677afaSXin Li return nil 58*ba677afaSXin Li} 59