Exemple #1
0
        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);
        }