Пример #1
0
 private void SetPlayer1(
     ExaminationEvent result,
     IList <string> words)
 {
     LogTrace("SetPlayer1");
     for (int i = 0; i < words.Count - 1; i++)
     {
         var playerFirstName = words[i];
         if (NotAName(playerFirstName))
         {
             continue;
         }
         var playerLastName = words[i + 1];
         if (NotAName(playerLastName))
         {
             continue;
         }
         var playerName = $"{playerFirstName} {playerLastName}";
         LogTrace($"Calling Service to find {playerName}");
         var p = TflService.GetNflPlayer(
             playerFirstName,
             playerLastName);
         if (p != null)
         {
             result.PlayerId        = p.PlayerCode;
             result.PlayerFirstName = playerFirstName;
             result.PlayerLastName  = playerLastName;
             result.PlayerName      = playerName;
             break;
         }
     }
 }
Пример #2
0
 private ExaminationEvent PurifyTheText(
     NewsArticleCommand article,
     ExaminationEvent result)
 {
     //  get rid of the full stop at the end
     if (article.ArticleText.Substring(Math.Max(0, article.ArticleText.Length - 1)) == ".")
     {
         article.ArticleText = article.ArticleText.Substring(0, article.ArticleText.Length - 1);
     }
     //  get rid of commas
     article.ArticleText = article.ArticleText.Replace(",", string.Empty);
     //  get rid of the term exclusive rights free agent
     article.ArticleText = article.ArticleText.Replace("exclusive rights free agent ", string.Empty);
     //  get rid of the term restricted free agent
     article.ArticleText = article.ArticleText.Replace("restricted free agent ", string.Empty);
     //  Treat "agreed to terms with" as "signed"
     article.ArticleText = article.ArticleText.Replace("agreed to terms with", "signed");
     //  Treat "has agreed to a pay cut signing" as "signed"
     article.ArticleText = article.ArticleText.Replace("has agreed to a pay cut signing", "is signing");
     //  Treat "re-signed" as "signed"
     article.ArticleText = article.ArticleText.Replace("re-signed", "signed");
     //  Treat "claimed" as "signed"
     article.ArticleText = article.ArticleText.Replace("claimed", "signed");
     //  Treat "has retired" as "is retiring"
     article.ArticleText = article.ArticleText.Replace("has retired", "is retiring");
     //  Treat "waived/failed physical" as "waived"
     article.ArticleText = article.ArticleText.Replace("waived/failed physical", "waived");
     //  Treat "waived/released" as "waived"
     article.ArticleText = article.ArticleText.Replace("waived/released", "waived");
     //  Get rid of the positions
     article.ArticleText = StripOutPositions(article.ArticleText, result);
     //  remove possessives
     article.ArticleText = article.ArticleText.Replace("'s", "");
     return(result);
 }
Пример #3
0
        private void LogResult(
            ExaminationEvent result)
        {
            LogInfo($@"Result: {
				result.RecommendedAction
				} : {result.ArticleText}"                );
        }
        public bool Process(
            ExaminationEvent transactionEvent,
            ILog logger)
        {
            var p         = TflService.GetNflPlayer(transactionEvent.PlayerId);
            var eventDate = transactionEvent.EventDate
                            ?? transactionEvent.ExaminationDateTime;

            if (TflService.IsSameDay(p, eventDate))
            {
                logger.Info($@"Signing for {
					p.PlayerName
					} ignored: Same day contract rule"                    );
                return(false);
            }

            if (!string.IsNullOrEmpty(p.TeamCode))
            {
                //  end his previous team contract
                TflService.EndContract(
                    p,
                    when: eventDate,
                    isRetirement: false);
            }

            // start new contract
            return(transactionEvent.EventDate != null &&
                   TflService.RecordSigning(
                       p,
                       teamCode: transactionEvent.TeamId,
                       when: (DateTime)transactionEvent.EventDate,
                       how: "FA"));
        }
Пример #5
0
 private void NewMethodSetPosition(string articleText, ExaminationEvent result)
 {
     for (int i = 0; i < Positions.Length; i++)
     {
         var pos = Positions[i] + " ";
         if (articleText.Contains(pos))
         {
             result.Position = Positions[i];
         }
     }
 }
Пример #6
0
 private void ResultIsRetirement(
     ExaminationEvent result,
     int wordIndex,
     IList <string> words)
 {
     result.IsCut             = false;
     result.IsWaiver          = false;
     result.IsSigning         = false;
     result.IsRetirement      = true;
     result.RecommendedAction = Result.Retired;
     SetPlayer(result, words);
 }
Пример #7
0
        public bool ProcessEvent(ExaminationEvent transactionEvent)
        {
            Log.Trace($"Processing: {transactionEvent}");
            if (!ProcessingStrategies[transactionEvent.RecommendedAction]
                .Process(transactionEvent, Log))
            {
                return(true);
            }

            Log.Trace($"Handled: {transactionEvent}");
            ProcessCount++;
            return(true);
        }
Пример #8
0
        private ExaminationEvent FindPlayerNameByTeam(
            ExaminationEvent result,
            string articleText)
        {
            var words = articleText.Split(' ');

            for (var i = 0; i < words.Length; i++)
            {
                var word = words[i];
                if (WordIsTeamWord(word))
                {
                    SetPlayer(result, words);
                    SetTeam(result, i, words, 0);
                }
            }
            return(result);
        }
Пример #9
0
 private void SetTeam(
     ExaminationEvent result,
     int wordIndex,
     IList <string> words,
     int offset)
 {
     LogTrace("SetTeam");
     try
     {
         result.TeamName = words[wordIndex - offset];
         result.TeamId   = GetTeamCodeFor(words[wordIndex - offset]);
     }
     catch (ArgumentOutOfRangeException)
     {
         result.TeamName = "???";
         result.TeamId   = "??";
     }
     LogTrace($"SetTeam to {result.TeamName}");
 }
Пример #10
0
 private void ResultIsCut(
     ExaminationEvent result,
     int wordIndex,
     IList <string> words)
 {
     result.IsCut        = true;
     result.IsWaiver     = false;
     result.IsSigning    = false;
     result.IsRetirement = false;
     SetPlayer(result, words);
     SetTeam(result, wordIndex, words);
     if (string.IsNullOrEmpty(result.PlayerId))
     {
         result.RecommendedAction = Result.Ignore;
     }
     else
     {
         result.RecommendedAction = Result.Cut;
     }
 }
Пример #11
0
        public bool Process(
            ExaminationEvent transactionEvent,
            ILog logger)
        {
            var p = TflService.GetNflPlayer(transactionEvent.PlayerId);

            if (!string.IsNullOrEmpty(p.TeamCode))
            {
                TflService.EndContract(
                    p,
                    transactionEvent.EventDate
                    ?? transactionEvent.ExaminationDateTime,
                    isRetirement: false);
            }

            return(transactionEvent.EventDate != null &&
                   (TflService.RecordSigning(
                        p,
                        transactionEvent.TeamId,
                        (DateTime)transactionEvent.EventDate,
                        how: "T")));
        }
Пример #12
0
        public void ProcessMessage(
            IHandlerContext <NewsArticleCommand> context)
        {
            try
            {
                var msg = $@"[ARTICLE RECEIVED] : article = '{
					context.Message.ArticleText}'"                    ;
                WriteTraceLog(msg);
                Console.WriteLine();
                Console.WriteLine(msg);
                Console.WriteLine();
                var examinationEvent = new ExaminationEvent();
                examinationEvent = Examiner.ExamineArticle(context.Message);
                WriteTraceLog($"{examinationEvent}");

                if (examinationEvent.RecommendedAction != Constants.Result.Ignore)
                {
                    WriteTraceLog($"Processing {examinationEvent.RecommendedAction}");
                    Manager.ProcessEvent(examinationEvent);
                    //TODO: raise the event so subscribers might do something
                    //context.Publish(examinationEvent);
                }
                else
                {
                    WriteTraceLog($@"{
						examinationEvent
						} ignored - {
						context.Message.ArticleText
						}"                        );
                }
            }
            catch (Exception ex)
            {
                WriteErrorLog(
                    $"Article >>{context.Message.ArticleText}<< caused :- {ex.Message}", ex);
                throw;
            }
        }
Пример #13
0
        private void ResultIsSigning(
            ExaminationEvent result,
            int wordIndex,
            IList <string> words)
        {
            result.IsSigning    = true;
            result.IsWaiver     = false;
            result.IsRetirement = false;
            result.RecommendedAction
                = words[wordIndex].ToUpper() == "SIGNED" ||
                  words[wordIndex].ToUpper() == "SIGNING" ? "SIGN" : "TRADE";

            if (words[wordIndex].ToUpper() == "SIGNED")
            {
                SetPlayer(result, words);
                SetTeam(result, wordIndex, words);
            }
            else
            {
                if (result.RecommendedAction == "TRADE")
                {
                    SetPlayer1(result, words);
                    SetTeam(result, wordIndex, words);
                }
                else
                {
                    SetPlayer1(result, words);
                    SetTeam(result, wordIndex, words, 4);
                }
            }
            if (result.TeamId.Equals("??"))
            {
                result.IsSigning         = false;
                result.RecommendedAction = Result.Ignore;
            }
        }
Пример #14
0
 private void SetTeam(
     ExaminationEvent result,
     int wordIndex,
     IList <string> words)
 {
     LogTrace("SetTeam");
     try
     {
         var possibleTeamName = words[wordIndex - 1];
         if (possibleTeamName.Equals("have"))
         {
             wordIndex--;
             possibleTeamName = words[wordIndex - 1];
         }
         result.TeamName = possibleTeamName;
         result.TeamId   = GetTeamCodeFor(words[wordIndex - 1]);
     }
     catch (ArgumentOutOfRangeException)
     {
         result.TeamName = "???";
         result.TeamId   = "??";
     }
     LogTrace($"SetTeam to {result.TeamName}");
 }
Пример #15
0
        public ExaminationEvent ExamineArticle(NewsArticleCommand article)
        {
            LogTrace("----------------------------------");
            LogTrace($"Examining {article}");

            var result = new ExaminationEvent
            {
                EventDate           = article.ArticleDate,
                ExaminationDateTime = DateTime.Now,
                ArticleText         = article.ArticleText
            };

            //  Offer sheet not official
            if (article.ArticleText.ToUpper().Contains("OFFER SHEET"))
            {
                LogResult(result);
                return(result);
            }

            if (article.IsInDraftSeason())
            {
                //  Draft picks are handled by NFL.EXE
                if (article.ArticleText.ToUpper().Contains("OVERALL "))
                {
                    LogResult(result);
                    return(result);
                }
                if (article.ArticleText.ToUpper().Contains("ROUND "))
                {
                    //  sometime players are aquired in a trade for a late-round pick
                    if (!article.ArticleText.ToUpper().Contains("LATE-ROUND "))
                    {
                        LogResult(result);
                        return(result);
                    }
                }
            }

            result = PurifyTheText(article, result);
            LogTrace($"Purified {article}");

            //  Parse the article looking for a key word which triggers hunt
            //  for a player and optionally team
            string[] words = SplitIntoWords(article);
            LogTrace($"article contains {words.Length} words");
            var previousWord = string.Empty;

            for (var i = 0; i < words.Length; i++)
            {
                var word = words[i];
                if (WordIsSigningWord(word))
                {
                    ResultIsSigning(result, i, words);
                }
                if (WordIsWaiverWord(word))
                {
                    ResultIsWaiver(result, i, words);
                }
                if (WordIsCutWord(word, previousWord))
                {
                    ResultIsCut(result, i, words);
                }
                if (WordIsRetirementWord(word))
                {
                    ResultIsRetirement(result, i, words);
                }
                previousWord = word;
            }

            //  Look for 2 words
            if (IsInjury(article.ArticleText))
            {
                LogTrace("Article is injury");
                result.RecommendedAction = "INJURY";
                result.IsInjury          = true;
                result = FindPlayerNameByTeam(result, article.ArticleText);
            }

            if (result.IsRetirement)
            {
                LogResult(result);
                return(result);
            }

            // Two words Free Agent
            if (article.ArticleText.ToUpper().Contains("FREE AGENT"))
            {
                LogTrace("Article is about Free agent");
                var fawords = article.ArticleText.Split(' ');
                for (var i = 0; i < fawords.Length; i++)
                {
                    var word = fawords[i];
                    if (word.ToUpper() == "AGENT")
                    {
                        ResultIsFreeAgent(result, i, fawords);
                        break;
                    }
                }
            }

            if (result.RecommendedAction.Equals(Result.Ignore))
            {
                LogResult(result);
                return(result);
            }

            if (result.PlayerFirstName == null || result.PlayerLastName == null)
            {
                result.RecommendedAction = Result.Ignore;
            }
            else
            {
                if (!result.RecommendedAction.Equals("NEWBIE"))
                {
                    LogTrace($"Asking service for: {result.PlayerFirstName} {result.PlayerLastName}");
                    var p = TflService.GetNflPlayer(result.PlayerFirstName, result.PlayerLastName);
                    if (p == null)
                    {
                        result.RecommendedAction = Result.Ignore;
                    }
                    else
                    {
                        result.PlayerId = p.PlayerCode;
                    }
                }
            }
            LogResult(result);
            return(result);
        }
Пример #16
0
 private string StripOutPositions(string articleText, ExaminationEvent result)
 {
     NewMethodSetPosition(articleText, result);
     return(Positions.Aggregate(articleText, (current, pos) =>
                                current.Replace(pos + " ", string.Empty)));
 }
Пример #17
0
        private void SetPlayer(
            ExaminationEvent result,
            IList <string> words)
        {
            var realFirstName = string.Empty;
            var realLastName  = string.Empty;

            LogTrace("SetPlayer");
            for (int i = 0; i < words.Count - 1; i++)
            {
                var playerFirstName = words[i];
                if (NotAName(playerFirstName))
                {
                    continue;
                }
                var playerLastName = words[i + 1];
                if (NotAName(playerLastName))
                {
                    continue;
                }
                //  attempt a code lookup
                var playerName = $"{playerFirstName} {playerLastName}";
                LogTrace($"Calling Service to find {playerName}");
                result.PlayerFirstName = playerFirstName;
                result.PlayerLastName  = playerLastName;
                var p = TflService.GetNflPlayer(
                    playerFirstName,
                    playerLastName);
                if (p != null)
                {
                    if (string.IsNullOrEmpty(result.PlayerId))
                    {
                        result.PlayerId        = p.PlayerCode;
                        result.PlayerFirstName = playerFirstName;
                        result.PlayerLastName  = playerLastName;
                        result.PlayerName      = playerName;
                        realFirstName          = playerFirstName;
                        realLastName           = playerLastName;
                    }
                    else
                    {
                        // 2 players found, we can only handle 1 at a time
                        result.PlayerId        = string.Empty;
                        result.PlayerFirstName = string.Empty;
                        result.PlayerLastName  = string.Empty;
                        result.PlayerName      = string.Empty;
                        break;
                    }
                }
            }
            if (string.IsNullOrEmpty(result.PlayerId) &&
                !string.IsNullOrEmpty(result.PlayerFirstName) &&
                !string.IsNullOrEmpty(result.PlayerLastName)
                )
            {
                if (!result.RecommendedAction.Equals("WAIVER"))
                {
                    // potential Newbie??
                    Log.Info($"{result.PlayerFirstName} {result.PlayerLastName} is a potential newbie");
                    result.RecommendedAction = "NEWBIE";
                }
            }
            else
            {
                //  we have identified, get rid of newbie names
                result.PlayerFirstName = realFirstName;
                result.PlayerLastName  = realLastName;
            }
        }