99 lines
3.8 KiB
C#
99 lines
3.8 KiB
C#
namespace Hcs.Broker.Api.Request
|
||
{
|
||
internal static class RequestHelper
|
||
{
|
||
/// <summary>
|
||
/// Подготовка заголовка сообщения отправляемого в ГИС ЖКХ с обязательными атрибутами.
|
||
/// Заголовки могут быть разного типа для разных типов сообщений, но имена полей одинаковые.
|
||
/// </summary>
|
||
internal static THeader CreateHeader<THeader>(Client client) where THeader : class
|
||
{
|
||
try
|
||
{
|
||
var instance = Activator.CreateInstance(typeof(THeader));
|
||
foreach (var prop in instance.GetType().GetProperties())
|
||
{
|
||
switch (prop.Name)
|
||
{
|
||
case "Item":
|
||
prop.SetValue(instance, client.OrgPPAGUID);
|
||
break;
|
||
|
||
case "ItemElementName":
|
||
prop.SetValue(instance, Enum.Parse(prop.PropertyType, "orgPPAGUID"));
|
||
break;
|
||
|
||
case "MessageGUID":
|
||
prop.SetValue(instance, Guid.NewGuid().ToString());
|
||
break;
|
||
|
||
case "Date":
|
||
prop.SetValue(instance, DateTime.Now);
|
||
break;
|
||
|
||
case "IsOperatorSignatureSpecified":
|
||
if (client.Role == OrganizationRole.RC || client.Role == OrganizationRole.RSO)
|
||
{
|
||
prop.SetValue(instance, true);
|
||
}
|
||
break;
|
||
|
||
case "IsOperatorSignature":
|
||
if (client.Role == OrganizationRole.RC || client.Role == OrganizationRole.RSO)
|
||
{
|
||
prop.SetValue(instance, true);
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
return instance as THeader;
|
||
}
|
||
catch (ArgumentNullException e)
|
||
{
|
||
throw new ApplicationException($"Error occured while building request header: {e.Message}");
|
||
}
|
||
catch (SystemException e)
|
||
{
|
||
throw new ApplicationException($"Error occured while building request header: {e.GetBaseException().Message}");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Для объекта запроса возвращает значение строки свойства version
|
||
/// </summary>
|
||
internal static string GetRequestVersionString(object requestObject)
|
||
{
|
||
if (requestObject == null)
|
||
{
|
||
return null;
|
||
}
|
||
|
||
var versionHost = requestObject;
|
||
if (versionHost != null)
|
||
{
|
||
var versionProperty = versionHost.GetType().GetProperties().FirstOrDefault(x => x.Name == "version");
|
||
if (versionProperty != null)
|
||
{
|
||
return versionProperty.GetValue(versionHost) as string;
|
||
}
|
||
}
|
||
|
||
foreach (var field in requestObject.GetType().GetFields())
|
||
{
|
||
versionHost = field.GetValue(requestObject);
|
||
if (versionHost != null)
|
||
{
|
||
var versionProperty = versionHost.GetType().GetProperties().FirstOrDefault(x => x.Name == "version");
|
||
if (versionProperty != null)
|
||
{
|
||
return versionProperty.GetValue(versionHost) as string;
|
||
}
|
||
}
|
||
}
|
||
|
||
return null;
|
||
}
|
||
}
|
||
}
|