20240328
This commit is contained in:
parent
84d94a2463
commit
f19ee998af
@ -9,7 +9,10 @@ namespace anbs_cp.Classes;
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
История версий
|
История версий
|
||||||
|
Обновлено 2024.03.28
|
||||||
|
* Все поля Errors, Warnings и Infos объеденены в одно Messages
|
||||||
|
* В ActionStateMessage добавлен параметр, определяющий тип: MessageType
|
||||||
|
|
||||||
Обновлено 2024.03.26
|
Обновлено 2024.03.26
|
||||||
* Все интерфейсы объеденины в один класс ActionStateMessage
|
* Все интерфейсы объеденины в один класс ActionStateMessage
|
||||||
* Интерфейс IActionState удалён
|
* Интерфейс IActionState удалён
|
||||||
@ -27,48 +30,33 @@ namespace anbs_cp.Classes;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public class ActionState<T>: ISerializable
|
public class ActionState<T> (T? defaultValue = default): ISerializable
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Конструктор по умолчанию
|
|
||||||
/// </summary>
|
|
||||||
// ReSharper disable once MemberCanBeProtected.Global
|
|
||||||
public ActionState ()
|
|
||||||
{
|
|
||||||
Messages = [];
|
|
||||||
Value = default;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Конструктор с указанием начального значения <see cref="Value"/>
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="defaultValue">Начальное значение <see cref="Value"/></param>
|
|
||||||
public ActionState (T defaultValue)
|
|
||||||
{
|
|
||||||
Messages = [];
|
|
||||||
Value = defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Список информации
|
/// Список информации
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<ActionStateMessage> Messages { get; }
|
// ReSharper disable once CollectionNeverQueried.Local
|
||||||
|
internal List<ActionStateMessage> Messages { get; } = [];
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Значение
|
/// Значение
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public T? Value { get; set; }
|
public T? Value { get; set; } = defaultValue;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Метод для выбора всех значений для условия
|
||||||
|
/// </summary>
|
||||||
|
// ReSharper disable once StaticMemberInGenericType
|
||||||
|
public static readonly Func<ActionStateMessage, bool> SelectAll = _ => true;
|
||||||
|
|
||||||
#region Методы
|
#region Методы
|
||||||
|
|
||||||
#region Очистка
|
#region Очистка
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Очищает список ошибок
|
/// Очищает список ошибок
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void ClearErrors ()
|
public void ClearErrors ()
|
||||||
{
|
{
|
||||||
Errors.Clear();
|
Clear(message => message.MessageType == EActionStateMessageType.Error);
|
||||||
Errors.TrimExcess();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -76,8 +64,7 @@ public class ActionState<T>: ISerializable
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void ClearWarnings ()
|
public void ClearWarnings ()
|
||||||
{
|
{
|
||||||
Warnings.Clear();
|
Clear(message => message.MessageType == EActionStateMessageType.Warning);
|
||||||
Warnings.TrimExcess();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -85,18 +72,22 @@ public class ActionState<T>: ISerializable
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void ClearInfo ()
|
public void ClearInfo ()
|
||||||
{
|
{
|
||||||
Info.Clear();
|
Clear(message => message.MessageType == EActionStateMessageType.Information);
|
||||||
Info.TrimExcess();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Очищает все списки
|
/// Очищает список по условию <paramref name="predicate"/>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Clear ()
|
/// <param name="predicate">Условие выборки</param>
|
||||||
|
public void Clear (Func<ActionStateMessage, bool> predicate)
|
||||||
{
|
{
|
||||||
ClearInfo();
|
// Получаю список элементов
|
||||||
ClearWarnings();
|
IEnumerable<ActionStateMessage> list = Messages.Where(predicate);
|
||||||
ClearErrors();
|
|
||||||
|
// Для каждого элемента
|
||||||
|
foreach (ActionStateMessage actionStateMessage in list)
|
||||||
|
// - запускаю его удаление
|
||||||
|
Messages.Remove(actionStateMessage);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -116,39 +107,21 @@ public class ActionState<T>: ISerializable
|
|||||||
public void AddRange (IEnumerable<ActionStateMessage> messages) => Messages.AddRange(messages);
|
public void AddRange (IEnumerable<ActionStateMessage> messages) => Messages.AddRange(messages);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Добавление ошибки
|
#region Добавление ошибки
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Добавление ошибки
|
/// Добавление ошибки
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="critical">Является ли ошибка критической</param>
|
/// <param name="critical">Является ли ошибка критической</param>
|
||||||
public void AddError (bool critical = true)
|
public void AddError (bool critical = true) => Add(new(EActionStateMessageType.Error, critical));
|
||||||
{
|
|
||||||
//Создаю ошибку
|
|
||||||
ActionStateMessage error = new("", critical)
|
|
||||||
{
|
|
||||||
MessageType = EActionStateMessageType.Error
|
|
||||||
};
|
|
||||||
|
|
||||||
//Добавляю ошибку
|
|
||||||
Add(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Добавление ошибки
|
/// Добавление ошибки
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="message">Сообщение об ошибке</param>
|
/// <param name="message">Сообщение об ошибке</param>
|
||||||
/// <param name="critical">Является ли ошибка критической</param>
|
/// <param name="critical">Является ли ошибка критической</param>
|
||||||
public void AddError (string message, bool critical = true)
|
public void AddError (string message, bool critical = true) =>
|
||||||
{
|
Add(new(EActionStateMessageType.Error, critical, message: message));
|
||||||
//Создаю ошибку
|
|
||||||
ActionStateMessage error = new(message, critical)
|
|
||||||
{
|
|
||||||
MessageType = EActionStateMessageType.Error
|
|
||||||
};
|
|
||||||
|
|
||||||
//Добавляю ошибку
|
|
||||||
Add(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Добавление ошибки
|
/// Добавление ошибки
|
||||||
@ -156,73 +129,28 @@ public class ActionState<T>: ISerializable
|
|||||||
/// <param name="errorObject">Объект ошибки</param>
|
/// <param name="errorObject">Объект ошибки</param>
|
||||||
/// <param name="message">Сообщение об ошибке</param>
|
/// <param name="message">Сообщение об ошибке</param>
|
||||||
/// /// <param name="critical">Является ли ошибка критической</param>
|
/// /// <param name="critical">Является ли ошибка критической</param>
|
||||||
public void AddError (string errorObject, string message, bool critical = true)
|
public void AddError (string errorObject, string message, bool critical = true) =>
|
||||||
{
|
Add(new(EActionStateMessageType.Error, critical, errorObject, message));
|
||||||
//Создаю ошибку
|
|
||||||
ActionStateMessage error = new(errorObject, message, critical)
|
|
||||||
{
|
|
||||||
MessageType = EActionStateMessageType.Error
|
|
||||||
};
|
|
||||||
|
|
||||||
//Добавляю ошибку
|
|
||||||
Add(error);
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Добавление предупреждения
|
#region Добавление предупреждения
|
||||||
/// <summary>
|
|
||||||
/// Добавление предупреждения
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="warning">Предупреждение</param>
|
|
||||||
public void AddWarning (ActionStateMessage warning) => Warnings.Add(warning);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Добавление предупреждений
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="warnings">Список предупреждений</param>
|
|
||||||
public void AddWarnings (IEnumerable<ActionStateMessage> warnings) => Warnings.AddRange(warnings);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Добавление предупреждение
|
/// Добавление предупреждение
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="message">Текст предупреждения</param>
|
/// <param name="message">Текст предупреждения</param>
|
||||||
/// <param name="warningObject">Объект предупреждения</param>
|
/// <param name="warningObject">Объект предупреждения</param>
|
||||||
public void AddWarning (string message, string warningObject = "")
|
public void AddWarning (string message, string warningObject = "") =>
|
||||||
{
|
Add(new(EActionStateMessageType.Warning, message: message, obj: warningObject));
|
||||||
//Создаю предупреждение
|
|
||||||
ActionStateMessage warning = new(warningObject, message);
|
|
||||||
|
|
||||||
//Добавляю предупреждение
|
|
||||||
AddWarning(warning);
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Добавление информации
|
#region Добавление информации
|
||||||
/// <summary>
|
|
||||||
/// Добавление информации
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="info">Информация</param>
|
|
||||||
public void AddInfo (ActionStateMessage info) => Info.Add(info);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Добавление информации
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="infos">Список информации</param>
|
|
||||||
public void AddInfos (IEnumerable<ActionStateMessage> infos) => Info.AddRange(infos);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Добавление информации
|
/// Добавление информации
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="message">Текст информации</param>
|
/// <param name="message">Текст информации</param>
|
||||||
/// <param name="infoObject">Объект информации</param>
|
/// <param name="infoObject">Объект информации</param>
|
||||||
public void AddInfo (string message, string infoObject = "")
|
public void AddInfo (string message, string infoObject = "") => Add(new(message: message, obj: infoObject));
|
||||||
{
|
|
||||||
//Создаю информацию
|
|
||||||
ActionStateMessage info = new(infoObject, message);
|
|
||||||
|
|
||||||
//Добавляю информацию
|
|
||||||
AddInfo(info);
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Печать
|
#region Печать
|
||||||
@ -243,22 +171,20 @@ public class ActionState<T>: ISerializable
|
|||||||
switch (area)
|
switch (area)
|
||||||
{
|
{
|
||||||
case EActionStatePrintArea.All:
|
case EActionStatePrintArea.All:
|
||||||
list.AddRange(Errors);
|
list.AddRange(Messages);
|
||||||
list.AddRange(Warnings);
|
|
||||||
list.AddRange(Info);
|
|
||||||
break;
|
break;
|
||||||
case EActionStatePrintArea.ErrorsAndWarnings:
|
case EActionStatePrintArea.ErrorsAndWarnings:
|
||||||
list.AddRange(Errors);
|
list.AddRange(Messages.Where(message =>
|
||||||
list.AddRange(Warnings);
|
message.MessageType is EActionStateMessageType.Error or EActionStateMessageType.Warning));
|
||||||
break;
|
break;
|
||||||
case EActionStatePrintArea.ErrorsOnly:
|
case EActionStatePrintArea.ErrorsOnly:
|
||||||
list.AddRange(Errors);
|
list.AddRange(Messages.Where(message => message.MessageType == EActionStateMessageType.Error));
|
||||||
break;
|
break;
|
||||||
case EActionStatePrintArea.WarningsOnly:
|
case EActionStatePrintArea.WarningsOnly:
|
||||||
list.AddRange(Warnings);
|
list.AddRange(Messages.Where(message => message.MessageType == EActionStateMessageType.Warning));
|
||||||
break;
|
break;
|
||||||
case EActionStatePrintArea.InfosOnly:
|
case EActionStatePrintArea.InfosOnly:
|
||||||
list.AddRange(Info);
|
list.AddRange(Messages.Where(message => message.MessageType == EActionStateMessageType.Information));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new ArgumentOutOfRangeException(nameof(area), area, null);
|
throw new ArgumentOutOfRangeException(nameof(area), area, null);
|
||||||
@ -278,24 +204,24 @@ public class ActionState<T>: ISerializable
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ignoreNonCritical">Игнорировать не критические</param>
|
/// <param name="ignoreNonCritical">Игнорировать не критические</param>
|
||||||
/// <returns>Наличие ошибок</returns>
|
/// <returns>Наличие ошибок</returns>
|
||||||
public bool HasErrors (bool ignoreNonCritical = false) =>
|
public bool HasErrors (bool ignoreNonCritical = false) => Messages.Any(message =>
|
||||||
ignoreNonCritical ? Errors.Any(static error => error.IsCritical) : Errors.Any();
|
message.MessageType == EActionStateMessageType.Error && (!ignoreNonCritical || !message.IsCritical));
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Проверяет, есть ли предупреждения
|
/// Проверяет, есть ли предупреждения
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ignoreInformWarning">Игнорировать информационные предупреждения</param>
|
/// <param name="ignoreInformWarning">Игнорировать информационные предупреждения</param>
|
||||||
/// <returns>Наличие предупреждений</returns>
|
/// <returns>Наличие предупреждений</returns>
|
||||||
public bool HasWarnings (bool ignoreInformWarning = false) => ignoreInformWarning
|
public bool HasWarnings (bool ignoreInformWarning = false) => Messages.Any(message =>
|
||||||
? Warnings.Any(static warning => warning.IsCritical)
|
message.MessageType == EActionStateMessageType.Warning && (!ignoreInformWarning || !message.IsCritical));
|
||||||
: Warnings.Any();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Проверяет, есть ли сообщения
|
/// Проверяет, есть ли сообщения
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ignoreStatus">Игнорировать статусные сообщения</param>
|
/// <param name="ignoreStatus">Игнорировать статусные сообщения</param>
|
||||||
/// <returns>Наличие сообщений</returns>
|
/// <returns>Наличие сообщений</returns>
|
||||||
public bool HasInfo (bool ignoreStatus) => ignoreStatus ? Info.Any(static info => info.IsCritical) : Info.Any();
|
public bool HasInfo (bool ignoreStatus) => Messages.Any(message =>
|
||||||
|
message.MessageType == EActionStateMessageType.Information && (!ignoreStatus || !message.IsCritical));
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Успешно ли завершилось
|
/// Успешно ли завершилось
|
||||||
@ -305,46 +231,45 @@ public class ActionState<T>: ISerializable
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Количество сообщений
|
#region Количество сообщений
|
||||||
|
/// <summary>
|
||||||
|
/// Количество сообщений, удовлеьворяющих условию <paramref name="predicate"/>
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="predicate">Условие выборки</param>
|
||||||
|
/// <returns>Число сообщений</returns>
|
||||||
|
public int Count (Func<ActionStateMessage, bool> predicate) => Messages.Count(predicate);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Количество ошибок
|
/// Количество ошибок
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ignoreNonCritical">Игнорировать не критические</param>
|
/// <param name="ignoreNonCritical">Игнорировать не критические</param>
|
||||||
/// <returns>Количество ошибок</returns>
|
/// <returns>Количество ошибок</returns>
|
||||||
public int ErrorsCount (bool ignoreNonCritical = false) =>
|
public int ErrorsCount (bool ignoreNonCritical = false) => Count(message =>
|
||||||
ignoreNonCritical ? Errors.Count(static error => error.IsCritical) : Errors.Count;
|
message.MessageType == EActionStateMessageType.Error && (!ignoreNonCritical || !message.IsCritical));
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Количество предупреждений
|
/// Количество предупреждений
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ignoreInformWarning">Игнорировать информационные предупреждения</param>
|
/// <param name="ignoreInformWarning">Игнорировать информационные предупреждения</param>
|
||||||
/// <returns>Количество предупреждений</returns>
|
/// <returns>Количество предупреждений</returns>
|
||||||
public int WarningsCount (bool ignoreInformWarning = false) => ignoreInformWarning
|
public int WarningsCount (bool ignoreInformWarning = false) => Count(message =>
|
||||||
? Warnings.Count(static warning => warning.IsCritical)
|
message.MessageType == EActionStateMessageType.Warning && (!ignoreInformWarning || !message.IsCritical));
|
||||||
: Warnings.Count;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Количество информационных сообщений
|
/// Количество информационных сообщений
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ignoreStatus">Игнорировать статусные сообщения</param>
|
/// <param name="ignoreStatus">Игнорировать статусные сообщения</param>
|
||||||
/// <returns>Количество информационных сообщений</returns>
|
/// <returns>Количество информационных сообщений</returns>
|
||||||
public int InfoCount (bool ignoreStatus) => ignoreStatus
|
public int InfoCount (bool ignoreStatus) => Count(message =>
|
||||||
? Info.Count(static info => info.IsCritical)
|
message.MessageType == EActionStateMessageType.Information && (!ignoreStatus || !message.IsCritical));
|
||||||
: Info.Count;
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Добавление другого состояния
|
#region Добавление другого состояния
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>).
|
/// Добавляет другое состояние (например, результат другого действия, который возвращает <see cref="ActionState"/>).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T">Тип параметра</typeparam>
|
/// <typeparam name="T">Тип параметра</typeparam>
|
||||||
/// <param name="state">Запись состояния</param>
|
/// <param name="state">Запись состояния</param>
|
||||||
public void AddState (ActionState<T> state)
|
public void AddState (ActionState<T> state) => AddRange(state.Messages);
|
||||||
{
|
|
||||||
AddErrors(state.Errors);
|
|
||||||
AddWarnings(state.Warnings);
|
|
||||||
AddInfos(state.Info);
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -355,20 +280,10 @@ public class ActionState<T>: ISerializable
|
|||||||
// Создаю модель
|
// Создаю модель
|
||||||
ActionStateSerializable serializableModel = new();
|
ActionStateSerializable serializableModel = new();
|
||||||
|
|
||||||
// Для каждого информационного сообщения
|
// Для каждого сообщения
|
||||||
foreach (ActionStateMessage info in Info)
|
foreach (ActionStateMessage message in Messages)
|
||||||
// - добавляю в модель
|
// - добавляю в модель
|
||||||
serializableModel.Info.Add(info.Serialize());
|
serializableModel.Messages.Add(message.Serialize());
|
||||||
|
|
||||||
// Для каждого предупреждения
|
|
||||||
foreach (ActionStateMessage warning in Warnings)
|
|
||||||
// - добавляю в модель
|
|
||||||
serializableModel.Info.Add(warning.Serialize());
|
|
||||||
|
|
||||||
// Для каждой ошибки
|
|
||||||
foreach (ActionStateMessage error in Errors)
|
|
||||||
// - добавляю в модель
|
|
||||||
serializableModel.Info.Add(error.Serialize());
|
|
||||||
|
|
||||||
// Создаю модель значения
|
// Создаю модель значения
|
||||||
ActionStateSerializableValue value = new();
|
ActionStateSerializableValue value = new();
|
||||||
@ -397,37 +312,17 @@ public class ActionState<T>: ISerializable
|
|||||||
ActionStateSerializableValue value = new();
|
ActionStateSerializableValue value = new();
|
||||||
|
|
||||||
// Очищаю списки
|
// Очищаю списки
|
||||||
Info.Clear();
|
Clear(SelectAll);
|
||||||
Warnings.Clear();
|
|
||||||
Errors.Clear();
|
|
||||||
|
|
||||||
// Для каждого информационного сообщения
|
// Для каждого сообщения
|
||||||
foreach (string infoString in itemSerializable.Info)
|
foreach (string messageString in itemSerializable.Messages)
|
||||||
{
|
{
|
||||||
// - создаю сообщение
|
// - создаю сообщение
|
||||||
ActionStateMessage info = new();
|
ActionStateMessage message = new();
|
||||||
// - десериализую в него данные из модели
|
// - десериализую в него данные из модели
|
||||||
info.Deserialize(infoString);
|
message.Deserialize(messageString);
|
||||||
// - добавляю в список
|
// - добавляю в список
|
||||||
Info.Add(info);
|
Add(message);
|
||||||
}
|
|
||||||
foreach (string warningString in itemSerializable.Warnings)
|
|
||||||
{
|
|
||||||
// - создаю сообщение
|
|
||||||
ActionStateMessage warning = new();
|
|
||||||
// - десериализую в него данные из модели
|
|
||||||
warning.Deserialize(warningString);
|
|
||||||
// - добавляю в список
|
|
||||||
Info.Add(warning);
|
|
||||||
}
|
|
||||||
foreach (string errorString in itemSerializable.Errors)
|
|
||||||
{
|
|
||||||
// - создаю сообщение
|
|
||||||
ActionStateMessage error = new();
|
|
||||||
// - десериализую в него данные из модели
|
|
||||||
error.Deserialize(errorString);
|
|
||||||
// - добавляю в список
|
|
||||||
Info.Add(error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Десериализую данные значения из модели
|
// Десериализую данные значения из модели
|
||||||
|
@ -9,143 +9,107 @@ namespace anbs_cp.Classes;
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Класс сообщения состояния
|
/// Класс сообщения состояния
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class ActionStateMessage: ISerializable
|
public sealed class ActionStateMessage (
|
||||||
|
EActionStateMessageType type = EActionStateMessageType.Information,
|
||||||
|
bool isCritical = false,
|
||||||
|
string obj = "",
|
||||||
|
string message = ""): ISerializable
|
||||||
{
|
{
|
||||||
#region Свойства
|
#region Свойства
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Тип сообщения
|
/// Тип сообщения
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public EActionStateMessageType MessageType { get; set; } = EActionStateMessageType.Information;
|
public EActionStateMessageType MessageType { get; set; } = type;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Критичность сообщения
|
/// Критичность сообщения
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsCritical { get; set; }
|
public bool IsCritical { get; set; } = isCritical;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Объект сообщения
|
/// Объект сообщения
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Object { get; set; }
|
public string Object { get; set; } = obj;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Текст сообщения
|
/// Текст сообщения
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Message { get; set; }
|
public string Message { get; set; } = message;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Конструкторы
|
#region Методы
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Конструктор по умолчанию
|
/// Вывод сообщения
|
||||||
/// </summary>
|
/// </summary>
|
||||||
// ReSharper disable once MemberCanBePrivate.Global
|
/// <param name="format">Строка-форматирование (например, «[{0}] - {1}»)</param>
|
||||||
public ActionStateMessage ()
|
/// <returns>Отформатированную строка</returns>
|
||||||
{
|
public string PrintMessage (string format) => string.Format(format, Object, Message);
|
||||||
IsCritical = true;
|
|
||||||
Object = "Not Implemented";
|
|
||||||
Message = "Not Implemented";
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Конструктор с 2 параметрами
|
/// Устанавливает объект
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="message">Сообщение</param>
|
/// <param name="obj">Объект</param>
|
||||||
/// <param name="isCritical">Критичность сообщения</param>
|
/// <typeparam name="T">Тип объекта</typeparam>
|
||||||
public ActionStateMessage (string message, bool isCritical = true)
|
public void SetObject<T> (T obj)
|
||||||
{
|
|
||||||
IsCritical = isCritical;
|
|
||||||
Object = "";
|
|
||||||
Message = message;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Конструктор с 3 параметрами
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="eObject">Объект сообщения</param>
|
|
||||||
/// <param name="message">Сообщение</param>
|
|
||||||
/// <param name="isCritical">Критичность сообщения</param>
|
|
||||||
public ActionStateMessage (string eObject, string message, bool isCritical = true)
|
|
||||||
{
|
|
||||||
IsCritical = isCritical;
|
|
||||||
Object = eObject;
|
|
||||||
Message = message;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Методы
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Вывод сообщения
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="format">Строка-форматирование (например, «[{0}] - {1}»)</param>
|
|
||||||
/// <returns>Отформатированную строка</returns>
|
|
||||||
public string PrintMessage (string format) => string.Format(format, Object, Message);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Устанавливает объект
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="obj">Объект</param>
|
|
||||||
/// <typeparam name="T">Тип объекта</typeparam>
|
|
||||||
public void SetObject<T> (T obj)
|
|
||||||
{
|
|
||||||
// Если объект реализует интерфейс ISerializable
|
|
||||||
if (obj is ISerializable serializable)
|
|
||||||
{
|
{
|
||||||
// - то сериализуем его методами интерфейса
|
// Если объект реализует интерфейс ISerializable
|
||||||
Object = serializable.Serialize();
|
if (obj is ISerializable serializable)
|
||||||
// - и прерываем
|
{
|
||||||
return;
|
// - то сериализуем его методами интерфейса
|
||||||
|
Object = serializable.Serialize();
|
||||||
|
// - и прерываем
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Сериализуем объект с помощью NewtonsoftJson
|
||||||
|
Object = new NewtonsoftJsonSerializer().Serialize(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Сериализуем объект с помощью NewtonsoftJson
|
/// <summary>
|
||||||
Object = new NewtonsoftJsonSerializer().Serialize(obj);
|
/// Получает объект
|
||||||
}
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Класс объекта</typeparam>
|
||||||
|
/// <returns>Объект или null</returns>
|
||||||
|
public T? GetObject<T> () => new NewtonsoftJsonSerializer().Deserialize<T>(Object);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Получает объект
|
/// Получает объект
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T">Класс объекта</typeparam>
|
/// <typeparam name="T">Класс объекта, реализующий интерфейс ISerializable</typeparam>
|
||||||
/// <returns>Объект или null</returns>
|
/// <returns>Объект</returns>
|
||||||
public T? GetObject<T> () => new NewtonsoftJsonSerializer().Deserialize<T>(Object);
|
public T GetSerializedObject<T> () where T : ISerializable, new()
|
||||||
|
{
|
||||||
|
// Создаём результирующую модель
|
||||||
|
T model = new();
|
||||||
|
|
||||||
/// <summary>
|
// Десериализуем её методами интерфейса ISerializable
|
||||||
/// Получает объект
|
model.Deserialize(Object);
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="T">Класс объекта, реализующий интерфейс ISerializable</typeparam>
|
|
||||||
/// <returns>Объект</returns>
|
|
||||||
public T GetSerializedObject<T> () where T : ISerializable, new()
|
|
||||||
{
|
|
||||||
// Создаём результирующую модель
|
|
||||||
T model = new();
|
|
||||||
|
|
||||||
// Десериализуем её методами интерфейса ISerializable
|
// Возвращаем модель
|
||||||
model.Deserialize(Object);
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
// Возвращаем модель
|
#endregion
|
||||||
return model;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#region Реализация интерфейса ISerializable
|
||||||
|
|
||||||
#region Реализация интерфейса ISerializable
|
/// <inheritdoc />
|
||||||
|
public string Serialize () => new NewtonsoftJsonSerializer().Serialize(this);
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string Serialize () => new NewtonsoftJsonSerializer().Serialize(this);
|
public void Deserialize (string json)
|
||||||
|
{
|
||||||
|
// Десериализую строку
|
||||||
|
ActionStateMessage item = new NewtonsoftJsonSerializer().Deserialize<ActionStateMessage>(json) ?? new();
|
||||||
|
|
||||||
/// <inheritdoc />
|
// Передаю параметры
|
||||||
public void Deserialize (string json)
|
MessageType = item.MessageType;
|
||||||
{
|
IsCritical = item.IsCritical;
|
||||||
// Десериализую строку
|
Object = item.Object;
|
||||||
ActionStateMessage item = new NewtonsoftJsonSerializer().Deserialize<ActionStateMessage>(json) ?? new();
|
Message = item.Message;
|
||||||
|
}
|
||||||
|
|
||||||
// Передаю параметры
|
#endregion
|
||||||
MessageType = item.MessageType;
|
|
||||||
IsCritical = item.IsCritical;
|
|
||||||
Object = item.Object;
|
|
||||||
Message = item.Message;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
}
|
}
|
@ -7,19 +7,9 @@ namespace anbs_cp.Classes;
|
|||||||
public class ActionStateSerializable
|
public class ActionStateSerializable
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Список информации
|
/// Список всех сообщений
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public List<string> Info { get; } = [];
|
public List<string> Messages { get; } = [];
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Список предупреждений
|
|
||||||
/// </summary>
|
|
||||||
public List<string> Warnings { get; } = [];
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Список ошибок
|
|
||||||
/// </summary>
|
|
||||||
public List<string> Errors { get; } = [];
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Значение
|
/// Значение
|
||||||
|
@ -31,20 +31,10 @@ public sealed class ActionStateSerialized<T>: ActionState<T> where T : ISerializ
|
|||||||
// Создаю модель
|
// Создаю модель
|
||||||
ActionStateSerializable serializableModel = new();
|
ActionStateSerializable serializableModel = new();
|
||||||
|
|
||||||
// Для каждого информационного сообщения
|
// Для каждого сообщения
|
||||||
foreach (ActionStateMessage info in Info)
|
foreach (ActionStateMessage message in Messages)
|
||||||
// - добавляю в модель
|
// - добавляю в модель
|
||||||
serializableModel.Info.Add(info.Serialize());
|
serializableModel.Messages.Add(message.Serialize());
|
||||||
|
|
||||||
// Для каждого предупреждения
|
|
||||||
foreach (ActionStateMessage warning in Warnings)
|
|
||||||
// - добавляю в модель
|
|
||||||
serializableModel.Info.Add(warning.Serialize());
|
|
||||||
|
|
||||||
// Для каждой ошибки
|
|
||||||
foreach (ActionStateMessage error in Errors)
|
|
||||||
// - добавляю в модель
|
|
||||||
serializableModel.Info.Add(error.Serialize());
|
|
||||||
|
|
||||||
// Создаю модель значения
|
// Создаю модель значения
|
||||||
ActionStateSerializableValue value = new();
|
ActionStateSerializableValue value = new();
|
||||||
@ -73,37 +63,17 @@ public sealed class ActionStateSerialized<T>: ActionState<T> where T : ISerializ
|
|||||||
ActionStateSerializableValue value = new();
|
ActionStateSerializableValue value = new();
|
||||||
|
|
||||||
// Очищаю списки
|
// Очищаю списки
|
||||||
Info.Clear();
|
Clear(SelectAll);
|
||||||
Warnings.Clear();
|
|
||||||
Errors.Clear();
|
|
||||||
|
|
||||||
// Для каждого информационного сообщения
|
// Для каждого сообщения
|
||||||
foreach (string infoString in itemSerializable.Info)
|
foreach (string messageString in itemSerializable.Messages)
|
||||||
{
|
{
|
||||||
// - создаю сообщение
|
// - создаю сообщение
|
||||||
ActionStateMessage info = new();
|
ActionStateMessage message = new();
|
||||||
// - десериализую в него данные из модели
|
// - десериализую в него данные из модели
|
||||||
info.Deserialize(infoString);
|
message.Deserialize(messageString);
|
||||||
// - добавляю в список
|
// - добавляю в список
|
||||||
Info.Add(info);
|
Add(message);
|
||||||
}
|
|
||||||
foreach (string warningString in itemSerializable.Warnings)
|
|
||||||
{
|
|
||||||
// - создаю сообщение
|
|
||||||
ActionStateMessage warning = new();
|
|
||||||
// - десериализую в него данные из модели
|
|
||||||
warning.Deserialize(warningString);
|
|
||||||
// - добавляю в список
|
|
||||||
Info.Add(warning);
|
|
||||||
}
|
|
||||||
foreach (string errorString in itemSerializable.Errors)
|
|
||||||
{
|
|
||||||
// - создаю сообщение
|
|
||||||
ActionStateMessage error = new();
|
|
||||||
// - десериализую в него данные из модели
|
|
||||||
error.Deserialize(errorString);
|
|
||||||
// - добавляю в список
|
|
||||||
Info.Add(error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Десериализую данные значения из модели
|
// Десериализую данные значения из модели
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
<Version>2024.3.27.2</Version>
|
<Version>2024.3.28</Version>
|
||||||
<Authors>Александр Бабаев</Authors>
|
<Authors>Александр Бабаев</Authors>
|
||||||
<Product>Набор компонентов ANB Software</Product>
|
<Product>Набор компонентов ANB Software</Product>
|
||||||
<Description>Библиотека полезных методов языка C#</Description>
|
<Description>Библиотека полезных методов языка C#</Description>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user