Files
2020-09-12 16:11:43 +02:00

189 lines
6.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using static CMS_CORE_Library.Models.DataStructures;
namespace Step.Model.DTOModels.AlarmModels
{
// Alarms from NC
public class DTOAlarmsModel
{
public List<GenericAlarmModel> NcAlarms { get; set; }
public List<DTOPlcAlarmModel> PlcAlarms { get; set; }
public List<ProcessAlarmModel> ProcessAlarms { get; set; }
public DTOAlarmsModel()
{
NcAlarms = new List<GenericAlarmModel>();
PlcAlarms = new List<DTOPlcAlarmModel>();
ProcessAlarms = new List<ProcessAlarmModel>();
}
public void Clear()
{
NcAlarms.Clear();
PlcAlarms.Clear();
ProcessAlarms.Clear();
}
public override bool Equals(object obj)
{
// Object is not a DTOAlarmsModel instance
if (!(obj is DTOAlarmsModel item))
return false;
// If the numbers of the list's elemets are different, lists are different
if (item.NcAlarms.Count != NcAlarms.Count || item.PlcAlarms.Count != this.PlcAlarms.Count || item.ProcessAlarms.Count != this.ProcessAlarms.Count)
return false;
// Check list's elements
bool listAreEquals = item.NcAlarms.All(NcAlarms.Contains);
if (!listAreEquals)
return false;
// Check list's elements
listAreEquals = item.PlcAlarms.All(PlcAlarms.Contains);
if (!listAreEquals)
return false;
// Check list's elements
listAreEquals = item.ProcessAlarms.All(ProcessAlarms.Contains);
if (!listAreEquals)
return false;
return true;
}
public DTOAlarmsModel IntersectModels(DTOAlarmsModel newAlarms)
{
DTOAlarmsModel result = new DTOAlarmsModel();
// Get common data from Obj1 and Obj2
result.NcAlarms = NcAlarms.Where(x => newAlarms.NcAlarms.Contains(x as GenericAlarmModel)).ToList();
// Concat common data + new data
result.NcAlarms = result.NcAlarms.Concat(
newAlarms.NcAlarms.Where(x => !NcAlarms.Contains(x as GenericAlarmModel)).ToList() // Find not contained data in the old list
).ToList();
// Get common data
result.PlcAlarms = PlcAlarms.Where(x => newAlarms.PlcAlarms.Contains(x as DTOPlcAlarmModel)).ToList();
// Concat common data + new data
result.PlcAlarms = result.PlcAlarms.Concat(
newAlarms.PlcAlarms.Where(x => !PlcAlarms.Contains(x as DTOPlcAlarmModel)).ToList() // Find not contained data in the old list
).ToList();
// Get common data
result.ProcessAlarms = ProcessAlarms.Where(x => newAlarms.ProcessAlarms.Contains(x as ProcessAlarmModel)).ToList();
// Concat common data + new data in the list
result.ProcessAlarms = result.ProcessAlarms.Concat(
newAlarms.ProcessAlarms.Where(x => !ProcessAlarms.Contains(x as ProcessAlarmModel)).ToList() // Find not contained data in the old list
).ToList();
return result;
}
public DTOAlarmsModel GetDifferences(DTOAlarmsModel newAlarms)
{
DTOAlarmsModel result = new DTOAlarmsModel();
// Get nc alarms differences
result.NcAlarms = newAlarms.NcAlarms.Where(x => !NcAlarms.Contains(x as GenericAlarmModel)).ToList(); // Find not contained data in the old list
// Get plc alarms differences
result.PlcAlarms = newAlarms.PlcAlarms.Where(x => !PlcAlarms.Contains(x as DTOPlcAlarmModel)).ToList(); // Find not contained data in the old list
// Get plc alarms differences
result.ProcessAlarms = newAlarms.ProcessAlarms.Where(x => !ProcessAlarms.Contains(x as ProcessAlarmModel)).ToList(); // Find not contained data in the old list
return result;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class GenericAlarmModel
{
public uint Id;
public string Message;
public DateTime DateTime;
public bool RestorationIsEnabled;
public override bool Equals(object obj)
{
if (!(obj is GenericAlarmModel item))
return false;
if (item.Message != Message)
return false;
if (item.Id == Id)
return true;
else
return false;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class ProcessAlarmModel : GenericAlarmModel
{
public int Process;
public override bool Equals(object obj)
{
if (!(obj is ProcessAlarmModel item))
return false;
if (!base.Equals(item))
return false;
if (item.Process == Process)
return true;
else
return false;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class DTOPlcAlarmModel : PlcAlarmModel
{
public DateTime DateTime;
public bool RestorationIsEnabled;
public override bool Equals(object obj)
{
if (!(obj is DTOPlcAlarmModel item))
return false;
if (item.Id != Id)
return false;
if (!item.Process.SequenceEqual(Process) || item.IsWarning != IsWarning || item.RestorationIsActive != RestorationIsActive)
return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
}
public class DTOAlarmConfigModel
{
public int Id;
public bool RestoreIsEnabled;
}
}