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  }