using RM.Eai.TotvsMessage.Intf;
using RM.Eai.TotvsMessage.IService;
using RM.Eai.TotvsMessage.Lib;
using RM.Lib;
using System.Collections.Generic;
using System.Data;
namespace RM.Eai.TotvsMessage.Adapter
{
[AdapterAttr(typeof(Properties.Resources),nameof(Properties.Resources.sEaiCaptionWhoIs), "WHOIS", "1.000", SubTypeEnum.teRequest)]
public class WhoIs_Send_1000 : IAdapterSend
{
#region Properties
private EAIAdapterContext AdapterContext { get; set; }
#endregion
/// <summary>
/// Método de inicialização do Adapter.
/// </summary>
/// <param name="adapterContext">Contexto de execução do Adapter</param>
public void InitializeAdapter(EAIAdapterContext adapterContext)
{
AdapterContext = adapterContext;
}
/// <summary>
/// Método responsável por informar ao EAI se a mensagem deve ser processada, ignorada ou gerar exceção.
/// </summary>
/// <param name="parms">Parametros</param>
/// <returns>Retorno</returns>
public EAICanExecuteSendResult CanExecute(EAICanExecuteSendParams parms)
{
//Não existe condicional, sempre permitindo enviar.
return new EAICanExecuteSendResult() { CanExecute = EAICanExecuteEnum.csEnviar };
}
/// <summary>
/// Método responsável por transformar os parâmetros de entrada no BusinessContent a ser enviado
/// </summary>
/// <param name="parms">Parâmetros originais</param>
/// <returns>Resultado do método de preparação, com o Objeto BusinessContent</returns>
public EAIPrepareSendResult Prepare(EAIPrepareSendParms parms)
{
EAIPrepareSendResult result = new EAIPrepareSendResult();
//A mensagem de WhoIs não possui dados no BusinessContent
result.BusinessContent = new WhoIsModel_V1_BusinessContent();
return result;
}
/// <summary>
/// Processa ReturnContent recebido, transformando no objeto no formato esperado pelo método chamador.
/// </summary>
/// <param name="parms">Parâmetros de entrada</param>
/// <returns>Resultado</returns>
public EAIProcessResponseMessageSendResult ProcessResponseMessage(EAIProcessResponseMessageSendParams parms)
{
EAIProcessResponseMessageSendResult result = new EAIProcessResponseMessageSendResult(parms.ResponseMessageItem);
//Obtém o ReturnContent deserializado para o tipo definido
WhoIsModel_V1_ReturnContent returnContent = (WhoIsModel_V1_ReturnContent)parms.ResponseMessageItem.ResponseMessage.ReturnContent.ReturnContentObj;
//Converte lista de transações no tipo de retorno.
EAIWhoIsResult listaTransacoes = new EAIWhoIsResult(AdapterContext.ContextItem.CurrentRoute.IdApp);
//Percorre todas as transações
foreach (WhoIsModel_V1_EnabledTransaction enabledTransaction in returnContent.EnabledTransactions)
{
EAIWhoIsTransaction transacao = new EAIWhoIsTransaction()
{
ModoHabilitado = ConvertModoHabilitado(RMSConvert.ToString(enabledTransaction.Mode)),//DONOTLOCALIZE
NomeMensagem = RMSConvert.ToString(enabledTransaction.Name),//DONOTLOCALIZE
Versao = RMSConvert.ToString(enabledTransaction.Version)//DONOTLOCALIZE
};
listaTransacoes.Add(transacao);
}
//Obtém o UUID da mensagem original
listaTransacoes.BusinessMessageUUID = this.AdapterContext.ContextItem.Message.UUID;
//Obtém o UUID da mensagem de resposta
listaTransacoes.ResponseMessageUUID = parms.ResponseMessageItem.MessageInformation.UUID;
//Adiciona no objeto de retorno
result.Data = listaTransacoes;
//Retorna o dado processado, no tipo de retorno esperado.
return result;
}
private EnabledModeEnum ConvertModoHabilitado(string Mode)
{
switch (Mode.ToUpperInvariant())
{
case "SEND_ENABLED"://DONOTLOCALIZE
return EnabledModeEnum.emSend;
case "RECEIVE_ENABLED"://DONOTLOCALIZE
return EnabledModeEnum.emReceive;
case "BOTH_ENABLED"://DONOTLOCALIZE
return EnabledModeEnum.emBoth;
default:
RMSException.Throw(string.Format(Properties.Resources.sEaiErroWhoIsModoInvalido, Mode));
//O método acima gera exceção, mas o compilador não compreende.
//A linha abaixo foi inserida para permitir compilação mas nunca será executada.
return 0;//EnabledModeEnum
}
}
}
}
|