dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts@v1.0.2/dtos/event.go (about) 1 // 2 // Copyright (C) 2020-2023 IOTech Ltd 3 // 4 // SPDX-License-Identifier: Apache-2.0 5 6 package dtos 7 8 import ( 9 "encoding/xml" 10 "time" 11 12 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/dtos/common" 13 "dev.azure.com/aidainnovazione0090/DeviceManager/_git/go-mod-core-contracts/models" 14 15 "github.com/google/uuid" 16 ) 17 18 type Event struct { 19 common.Versionable `json:",inline"` 20 Id string `json:"id" validate:"required,uuid"` 21 DeviceName string `json:"deviceName" validate:"required,edgex-dto-none-empty-string"` 22 ProfileName string `json:"profileName" validate:"required,edgex-dto-none-empty-string"` 23 SourceName string `json:"sourceName" validate:"required"` 24 Origin int64 `json:"origin" validate:"required"` 25 Readings []BaseReading `json:"readings" validate:"gt=0,dive,required"` 26 Tags Tags `json:"tags,omitempty"` 27 } 28 29 // NewEvent creates and returns an initialized Event with no Readings 30 func NewEvent(profileName, deviceName, sourceName string) Event { 31 return Event{ 32 Versionable: common.NewVersionable(), 33 Id: uuid.NewString(), 34 DeviceName: deviceName, 35 ProfileName: profileName, 36 SourceName: sourceName, 37 Origin: time.Now().UnixNano(), 38 } 39 } 40 41 // FromEventModelToDTO transforms the Event Model to the Event DTO 42 func FromEventModelToDTO(event models.Event) Event { 43 var readings []BaseReading 44 for _, reading := range event.Readings { 45 readings = append(readings, FromReadingModelToDTO(reading)) 46 } 47 48 tags := make(map[string]interface{}) 49 for tag, value := range event.Tags { 50 tags[tag] = value 51 } 52 53 return Event{ 54 Versionable: common.NewVersionable(), 55 Id: event.Id, 56 DeviceName: event.DeviceName, 57 ProfileName: event.ProfileName, 58 SourceName: event.SourceName, 59 Origin: event.Origin, 60 Readings: readings, 61 Tags: tags, 62 } 63 } 64 65 // AddSimpleReading adds a simple reading to the Event 66 func (e *Event) AddSimpleReading(resourceName string, valueType string, value interface{}) error { 67 reading, err := NewSimpleReading(e.ProfileName, e.DeviceName, resourceName, valueType, value) 68 if err != nil { 69 return err 70 } 71 e.Readings = append(e.Readings, reading) 72 return nil 73 } 74 75 // AddBinaryReading adds a binary reading to the Event 76 func (e *Event) AddBinaryReading(resourceName string, binaryValue []byte, mediaType string) { 77 e.Readings = append(e.Readings, NewBinaryReading(e.ProfileName, e.DeviceName, resourceName, binaryValue, mediaType)) 78 } 79 80 // AddObjectReading adds a object reading to the Event 81 func (e *Event) AddObjectReading(resourceName string, objectValue interface{}) { 82 e.Readings = append(e.Readings, NewObjectReading(e.ProfileName, e.DeviceName, resourceName, objectValue)) 83 } 84 85 // ToXML provides a XML representation of the Event as a string 86 func (e *Event) ToXML() (string, error) { 87 eventXml, err := xml.Marshal(e) 88 if err != nil { 89 return "", err 90 } 91 92 return string(eventXml), nil 93 }