/// <summary>
        /// Replays the content of the EventLog on the given PetriNet
        /// </summary>
        /// <param name="petriNet"></param>
        /// <param name="eventLog"></param>
        /// <returns></returns>
        /// <author>Jannik Arndt</author>
        public static TokenReplayResult Replay(PetriNet petriNet, EventLog eventLog)
        {
            var result = new TokenReplayResult {
                NumberOfCases = eventLog.Cases.Count
            };

            foreach (var Case in eventLog.Cases)
            {
                var exceptionThrown = false;
                petriNet.ResetTokens();
                foreach (var Event in Case.EventList)
                {
                    try
                    {
                        petriNet.FireTransition(Event.Name);
                    }
                    catch (NullReferenceException)
                    {
                        result.FailedCasesTransitionNotFound.Add(Case);
                        exceptionThrown = true;
                        break;
                    }
                    catch (TransitionNotEnabledException)
                    {
                        result.FailedCasesTransitionNotEnabled.Add(Case);
                        exceptionThrown = true;
                        break;
                    }
                }
                if (!exceptionThrown)
                {
                    result.SuccessfulReplays++;
                }
            }
            return(result);
        }