public async Task SaveAnswer()
{
AnswerIsReadOnly = true;
SaveAnswerButtonIsEnabled = false;
#region Thinking (try..)
var targetId = Guid.NewGuid();
History.Events.ThinkingAboutTargetEvent.Publish(targetId);
DisableNavigationRequestedEventMessage.Publish();
try
{
#endregion
#region Get the DB version of answer, then modify it and save
//STORE OUR MODIFIED TEXT
_ModifiedAnswerText = Answer.Text;
//PREPARE ANSWER TO BE SEARCHED FOR IN DB
Answer.Text = _InitialAnswerText;
PhrasesByTextAndLanguageRetriever retriever = null;
#region SEARCH IN DB FOR ANSWER (WITH INITIAL TEXT)
History.Events.ThinkingAboutTargetEvent.Publish(System.Guid.Empty);
{
retriever = await Business.PhrasesByTextAndLanguageRetriever.CreateNewAsync(Answer);
}
History.Events.ThinkingAboutTargetEvent.Publish(System.Guid.Empty);
var dbAnswer = retriever.RetrievedSinglePhrase;
if (dbAnswer == null)
{
//ANSWER NOT IN DB, BUT ANSWER IS A CHILD
if (Answer.IsChild)
{
//CANNOT SAVE THE ANSWER DIRECTLY BECAUSE IT IS A CHILD
#region CREATE NEW PHRASE EDIT, LOAD FROM ANSWER DTO, SAVE ANSWER
var newAnswerObj = await PhraseEdit.NewPhraseEditAsync();
Answer.Text = _ModifiedAnswerText;
var dto = Answer.CreateDto();
dto.Id = Guid.NewGuid();
newAnswerObj.LoadFromDtoBypassPropertyChecks(dto);
Answer = newAnswerObj;
#region Save Answer
Answer = await Answer.SaveAsync();
_InitialAnswerText = Answer.Text;
_ModifiedAnswerText = "";
SaveAnswerButtonIsEnabled = true;
AnswerIsReadOnly = true;
UpdateEditAnswerButtonVisibilities();
#endregion
#endregion
}
//ANSWER NOT IN DB, BUT ANSWER IS NOT A CHILD
else
{
#region SAVE THE ANSWER DIRECTLY, B/C IT IS NOT A CHILD
Answer = await Answer.SaveAsync();
_InitialAnswerText = Answer.Text;
_ModifiedAnswerText = "";
SaveAnswerButtonIsEnabled = true;
AnswerIsReadOnly = true;
UpdateEditAnswerButtonVisibilities();
#endregion
}
}
//ANSWER WAS FOUND IN DB
else
{
#region REASSIGN THE ANSWER WITH THE DBANSWER, SAVE WITH THE MODIFIED TEXT
Answer = dbAnswer;
Answer.Text = _ModifiedAnswerText;
Answer = await Answer.SaveAsync();
_InitialAnswerText = Answer.Text;
_ModifiedAnswerText = "";
SaveAnswerButtonIsEnabled = true;
AnswerIsReadOnly = true;
UpdateEditAnswerButtonVisibilities();
#endregion
}
#endregion
#endregion
#region (...finally) Thinked
}
finally
{
EnableNavigationRequestedEventMessage.Publish();
History.Events.ThinkedAboutTargetEvent.Publish(targetId);
}
#endregion
}