Forge
csharpdeeb25a2
1using System.Collections.ObjectModel;
2using CascadeIDE.Cockpit.Channels.Eicas;
3using CascadeIDE.Cockpit.Composition.WorkspaceHealth;
4
5namespace CascadeIDE.Cockpit.Composition.Eicas;
6
7/// <summary>
8/// Композитор поверхности для канала EICAS (ADR 0036 п.3): упорядочивает <see cref="EicasMessage"/> по серьёзности и времени
9/// перед привязкой к полосе/представлению. Отделён от <see cref="IdeHealthSurfaceCompositor"/> (композитор канала Workspace Health).
10/// </summary>
11public static class EicasMessageSorter
12{
13 /// <summary>Порядок: Warning → Caution → Advisory; внутри уровня — по времени (старше раньше), без времени — по тексту.</summary>
14 public static void Rebuild(ObservableCollection<EicasMessage> target, IReadOnlyList<EicasMessage> source)
15 {
16 target.Clear();
17 foreach (var m in source.OrderBy(Ordinal).ThenBy(m => m.CreatedUtc ?? DateTimeOffset.MinValue).ThenBy(m => m.Text, StringComparer.Ordinal))
18 target.Add(m);
19 }
20
21 private static int Ordinal(EicasMessage m) =>
22 m.Severity switch
23 {
24 EicasSeverity.Warning => 0,
25 EicasSeverity.Caution => 1,
26 _ => 2,
27 };
28}
29
View only · write via MCP/CIDE