Skip to content

Instantly share code, notes, and snippets.

@INTERNALINTERFERENCE
Created October 29, 2023 20:07
Show Gist options
  • Save INTERNALINTERFERENCE/54544a0d1c2e0793cfb0168b07892e35 to your computer and use it in GitHub Desktop.
Save INTERNALINTERFERENCE/54544a0d1c2e0793cfb0168b07892e35 to your computer and use it in GitHub Desktop.
public class VerbalizedEvent
{
private readonly EventData _eventData;
public VerbalizedEvent(MqttDelivery delivery)
{
Delivery = delivery;
if ( delivery.TryGetPayload<PayloadWithEventData>(out var payload))
{
_eventData = payload.EventData;
Title = _eventData?.Title ?? new();
Description = _eventData?.Description ?? new();
Items =
_eventData?.Items
.ExceptNull()
.ToList()
?? new List<DataItem>();
}
Categories = new( Items
.Where(item => item.IsOfType(DataItemType.Category))
.Select(item => item.ID.ToEnumOrDefault<EventCategoryType>()));
}
public MqttDelivery Delivery { get; }
public DateTimeOffset Timestamp =>
Delivery.Header.Timestamp.GetValueOrDefault();
public string Schema =>
Delivery.Header.Schema;
public string Name =>
Delivery.Header.Name;
public ApiQualifiedName QualifiedName =>
(Schema, Name);
public LocalizedString Title { get; } =
new();
public LocalizedString Description { get; } =
new();
public HashSet<EventCategoryType> Categories { get; } =
new();
public IReadOnlyList<DataItem> Items { get; } =
new List<DataItem>();
public List<DataItem> Sources =>
Items.Where( item => item.Traits.HasFlag(DataItemTraitType.Source)).ToList();
public List<DataItem> Targets =>
Items.Where( item => item.Traits.HasFlag(DataItemTraitType.Target)).ToList();
public List<DataItem> CategoryItems =>
Items.Where( item => item.IsOfType(DataItemType.Category)).ToList();
public List<DataItem> Reasons =>
Items.Where( item => item.IsOfType(DataItemType.Reason)).ToList();
public List<DataItem> Operators =>
Items.Where( item => item.IsOfType(DataItemType.Operator)).ToList();
public List<DataItem> OperatorGroups =>
Items.Where( item => item.IsOfType(DataItemType.OperatorGroup)).ToList();
public List<DataItem> IdentifierCodes =>
Items.Where( item => item.IsOfType(DataItemType.IdentifierCode)).ToList();
public List<DataItem> Identifiers =>
Items.Where( item => item.IsOfType(DataItemType.Identifier)).ToList();
public List<DataItem> Subjects =>
Items.Where( item => item.IsOfType(DataItemType.Subject)).ToList();
public List<DataItem> Departments =>
Items.Where( item => item.IsOfType(DataItemType.Department)).ToList();
public List<DataItem> Territories =>
Items.Where( item => item.IsOfType(DataItemType.Territory)).ToList();
public List<DataItem> TerritoryGroups =>
Items.Where( item => item.IsOfType( DataItemType.TerritoryGroup ) ).ToList();
public List<DataItem> AccessPoints =>
Items.Where( item => item.IsOfType( DataItemType.AccessPoint ) ).ToList();
public List<DataItem> Nodes =>
Items.Where( item => item.IsOfType( DataItemType.Node ) ).ToList();
public List<DataItem> Devices =>
Items.Where( item => item.IsOfType( DataItemType.Device ) ).ToList();
public List<DataItem> Objects =>
Items.Where( item => item.IsOfType(DataItemType.Object ) ).ToList();
public List<DataItem> Images =>
Items.Where( item => item.IsOfType(DataItemType.Image)).ToList();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment