public ThreadTO saveDraft(string pwd, Int32 replyingToMessageId, string threadSubject, Int32 messageCategory,
Int32 messageId, Int32 senderId, Int32 recipientId, string messageBody, Int32 messageOplock, Int32 threadOplock)
{
ThreadTO result = new ThreadTO();
if (String.IsNullOrEmpty(pwd))
{
result.fault = new FaultTO("Missing pwd");
}
else if (messageCategory > 0 && !Enum.IsDefined(typeof(gov.va.medora.mdo.domain.sm.enums.MessageCategoryTypeEnum), messageCategory))
{
result.fault = new FaultTO("Invalid message category");
}
else if (String.IsNullOrEmpty(messageBody))
{
result.fault = new FaultTO("Missing message body");
}
else if (messageId > 0 && messageOplock < 0)
{
result.fault = new FaultTO("Invalid message ID/message oplock");
}
else if (senderId <= 0 || recipientId <= 0)
{
result.fault = new FaultTO("Invalid sender/recipient");
}
if (result.fault != null)
{
return result;
}
try
{
Message message = new Message()
{
Body = messageBody,
Checksum = StringUtils.getMD5Hash(messageBody),
Id = messageId,
MessageThread = new Thread(),
RecipientId = recipientId,
SenderId = senderId,
Oplock = messageOplock
};
message.MessageThread.Subject = threadSubject;
if (Enum.IsDefined(typeof(mdo.domain.sm.enums.MessageCategoryTypeEnum), messageCategory))
{
message.MessageThread.MessageCategoryType = (mdo.domain.sm.enums.MessageCategoryTypeEnum)messageCategory;
}
message.MessageThread.Oplock = threadOplock;
using (MdoOracleConnection cxn = new MdoOracleConnection(new mdo.DataSource() { ConnectionString = pwd }))
{
SecureMessageDao dao = new SecureMessageDao(cxn);
if (replyingToMessageId > 0)
{
Message replyingToMsg = dao.getMessage(replyingToMessageId);
if (replyingToMsg == null || replyingToMsg.Id <= 0 || replyingToMsg.MessageThread == null || replyingToMsg.MessageThread.Id <= 0)
{
throw new Exception("Invalid reply to message ID");
}
message.MessageThread.Id = replyingToMsg.MessageThread.Id;
}
gov.va.medora.mdo.domain.sm.Message savedDraft = dao.saveDraft(message);
MessageTO msg = new MessageTO(savedDraft);
result = new ThreadTO(savedDraft.MessageThread);
result.messages = new MessageTO[] { msg };
}
}
catch (Exception exc)
{
result.fault = new FaultTO(exc);
}
return result;
}