blob: 79b6e59cb17cce4244e190678e0f7552d0783722 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.BL.Entities;
using Tango.Core;
using Tango.PMR.Diagnostics;
namespace Tango.Integration.Operation
{
/// <summary>
/// Represents the default machine events state provider.
/// </summary>
/// <seealso cref="Tango.Integration.Operation.IMachineEventsStateProvider" />
public class DefaultMachineEventsStateProvider : ExtendedObject, IMachineEventsStateProvider
{
private ReadOnlyObservableCollection<MachinesEvent> _events;
/// <summary>
/// Gets the current machine events.
/// </summary>
public ReadOnlyObservableCollection<MachinesEvent> Events
{
get
{
return _events;
}
}
/// <summary>
/// Gets or sets a value indicating whether this instance has events.
/// </summary>
public bool HasEvents
{
get
{
return Events.Count > 0;
}
}
/// <summary>
/// Occurs when new events are available.
/// </summary>
public event EventHandler<IEnumerable<MachinesEvent>> NewEvents;
/// <summary>
/// Occurs when a new events states has been received.
/// </summary>
public event EventHandler<IEnumerable<MachinesEvent>> EventsReceived;
/// <summary>
/// Occurs when old events has been resolved.
/// </summary>
public event EventHandler<IEnumerable<MachinesEvent>> EventsResolved;
/// <summary>
/// Occurs when the collection of current events has changed.
/// </summary>
public event EventHandler<IEnumerable<MachinesEvent>> EventsChanged;
/// <summary>
/// Initializes a new instance of the <see cref="DefaultMachineEventsStateProvider"/> class.
/// </summary>
public DefaultMachineEventsStateProvider()
{
_events = new ReadOnlyObservableCollection<MachinesEvent>(new ObservableCollection<MachinesEvent>());
}
/// <summary>
/// Applies the collection of events received from the machine operator.
/// </summary>
/// <param name="events">The events.</param>
public void ApplyEvents(IEnumerable<Event> events)
{
List<MachinesEvent> receivedEvents = events.Select(x => new MachinesEvent(x)).ToList();
List<MachinesEvent> newEvents = receivedEvents.Where(x => !_events.ToList().Exists(y => y.Type == x.Type)).ToList();
List<MachinesEvent> oldEvents = _events.Where(x => !receivedEvents.Exists(y => y.Type == x.Type)).ToList();
_events = new ReadOnlyObservableCollection<MachinesEvent>(new ObservableCollection<MachinesEvent>(receivedEvents));
if (newEvents.Count > 0)
{
OnNewEvents(newEvents);
}
if (oldEvents.Count > 0)
{
OnEventsResolved(oldEvents);
}
if (newEvents.Count > 0 || oldEvents.Count > 0)
{
RaisePropertyChanged(nameof(Events));
OnEventsChanged(_events);
}
OnEventsReceived(_events);
RaisePropertyChanged(nameof(HasEvents));
}
/// <summary>
/// Called when the new has been events
/// </summary>
/// <param name="events">The events.</param>
protected virtual void OnNewEvents(IEnumerable<MachinesEvent> events)
{
NewEvents?.Invoke(this, events);
}
/// <summary>
/// Called when the events has been received
/// </summary>
/// <param name="events">The events.</param>
protected virtual void OnEventsReceived(IEnumerable<MachinesEvent> events)
{
EventsReceived?.Invoke(this, events);
}
/// <summary>
/// Called when the events has been resolved
/// </summary>
/// <param name="events">The events.</param>
protected virtual void OnEventsResolved(IEnumerable<MachinesEvent> events)
{
EventsResolved?.Invoke(this, events);
}
/// <summary>
/// Called when the events has been changed
/// </summary>
/// <param name="events">The events.</param>
protected virtual void OnEventsChanged(IEnumerable<MachinesEvent> events)
{
EventsChanged?.Invoke(this, events);
}
/// <summary>
/// Resets the current events tracking.
/// </summary>
public void Reset()
{
_events = new ReadOnlyObservableCollection<MachinesEvent>(new ObservableCollection<MachinesEvent>(new List<MachinesEvent>()));
RaisePropertyChanged(nameof(Events));
OnEventsChanged(new List<MachinesEvent>());
}
}
}
|