private bool translateRequest(Request request, Interface i) { bool bTranslate = false; bool bSuccess = false; String message = ""; try { AuditUtil.getInstance().audit(request.RequestId, AuditLevel.Info, "Translation started for the message"); translator.RequestId = request.RequestId; message = i.Handler.getMessageForTranslation(request.MessageBody); //if (_searchString != "") //{ // message = message.Replace(_searchString, " " + _replaceString + " "); //} IList <IMessageParser> currentParsers = new List <IMessageParser>(); foreach (string fileFormat in i.FileFormats) { if (_parsers.ContainsKey(fileFormat)) { currentParsers.Add(_parsers[fileFormat]); } } int counter = 0; bool bAbort = false; while (counter < _maxTranslateRetryCount && !bTranslate && !bAbort) { counter++; bTranslate = false; try { int currentParserCount = 0; while (!bTranslate && currentParserCount < currentParsers.Count) { bTranslate = currentParsers[currentParserCount].translate(request, message); if (bTranslate) { LogUtil.logInfo("Message:" + request.RequestId + " is processed by an instance of " + currentParsers[currentParserCount].GetType().FullName); } currentParserCount++; } if (!bTranslate) { bTranslate = _fallBackParser.translate(request, message); if (bTranslate) { LogUtil.logInfo("Message:" + request.RequestId + " is processed by an instance of " + _fallBackParser.GetType().FullName); } } if (!bTranslate) { //couldnt translate. Wait and retry System.Threading.Thread.Sleep(_waitTimeBetweenRetries); } counter++; } catch (AbortTranslationException e) { bAbort = true; LogUtil.log("Error translating the message:" + request.RequestId, e); } catch (Exception e) { LogUtil.log("Error translating the message:" + request.RequestId, e); } } if (bTranslate) { request.Status = Status.Translated; request.IsError = false; i.Handler.getRepackagedTranslatedString(request, message); _dbUtils.addTranslatedMessage(request); if (request.HasCTC) { AuditUtil.getInstance().audit(request.RequestId, AuditLevel.Info, "Message has telegraphic codes"); } else { AuditUtil.getInstance().audit(request.RequestId, AuditLevel.Info, "Message doesn't have telegraphic codes"); } AuditUtil.getInstance().audit(request.RequestId, AuditLevel.Info, "Translation complete"); //if review of translations flag is set to false, move the message to OFAC Queue if (_brequiresReview == false) { bSuccess = i.Driver.sendForOfacCheck(request); if (bSuccess) { _bSentForOFACCheck = true; request.Status = Status.SentForOfacCheck; request.IsError = false; _dbUtils.changeStatus(request); AuditUtil.getInstance().audit(request.RequestId, AuditLevel.Info, "Translation review flag is not set. Message directly sent for watchlist filtering check"); } } // if the message has set of CTC codes that have already been reviewed and approved, move the message // directly for OFAC Check else if (_dbUtils.getApprovedTranslationsByRequest(request.RequestId)) { i.Driver.sendForOfacCheck(request); //Set the boolean variable to true to indicate that the message has already been sent for OFAC check _bSentForOFACCheck = true; //change status and log and audit and return request.Status = Status.SentForOfacCheck; request.IsError = false; _dbUtils.changeStatus(request); AuditUtil.getInstance().audit(request.RequestId, AuditLevel.Info, "Message sent for watchlist filtering check"); } //If Requires Review flag is set to true and the message as CTC codes then move the message to Review Queue else if (_brequiresReview && request.HasCTC) { if (i.Driver.shouldMoveToReview()) { //send it to review Queue i.Driver.moveToReview(request); _bSentForOFACCheck = false; //_bReview = true; //change status and log and audit and return request.Status = Status.Review; request.IsError = false; _dbUtils.changeStatus(request); AuditUtil.getInstance().audit(request.RequestId, AuditLevel.Info, "Message moved to Review Queue for verification of translation"); } } } else { //change status and log and audit and return request.Status = Status.Unprocessed; request.IsError = true; _dbUtils.changeStatus(request); LogUtil.logError("Cannot translate message:" + request.RequestId); AuditUtil.getInstance().audit(request.RequestId, AuditLevel.Error, "Error translating the message"); } } catch (Exception e) { bTranslate = false; LogUtil.log("Error when translating message:" + request.RequestId, e); AuditUtil.getInstance().audit(request.RequestId, AuditLevel.Error, "Error translating the message"); } return(bTranslate); }