예제 #1
0
        /// <summary>
        ///     Create a new instance (in memory and database) of <see cref="T:Business.EliminationStep" /> with specified param
        /// </summary>
        /// <param name="phase">Phase linked to this new step</param>
        /// <param name="teamList">Team involved in this new step</param>
        /// <param name="matchSetting">Set setting match for new Elimination phase</param>
        /// <param name="firstStep">Set first step for elimination step</param>
        /// <returns>EliminationStep's instance</returns>
        public static IEliminationStep Create(IPhase phase, IList <ITeam> teamList, IMatchSetting matchSetting,
                                              EliminationType firstStep)
        {
            if (phase == null)
            {
                throw new ArgumentNullException(nameof(phase));
            }
            if (teamList == null)
            {
                throw new ArgumentNullException(nameof(teamList));
            }
            if (matchSetting == null)
            {
                throw new ArgumentNullException(nameof(matchSetting));
            }

            var requiredTeam = (ushort)firstStep * 2;

            if (teamList.Count != requiredTeam)
            {
                throw new ArgumentException(
                          $"La première étape de la phase éliminatoire ne correspond pas au nombre équipe fourni. Nombre d'équipe requise:{requiredTeam}. Nombre d'équipe:{teamList.Count}");
            }

            var result = new EliminationStep(phase, teamList, matchSetting)
            {
                Type = firstStep
            };

            return(result);
        }
예제 #2
0
        /// <summary>
        ///     Determine type of step is after specified type
        /// </summary>
        /// <param name="actualStep">Reference to compute next step</param>
        /// <returns>Next step if exist, else null if is no step after.</returns>
        public static EliminationType?DetermineNextEliminationStep(EliminationType actualStep)
        {
            switch (actualStep)
            {
            case EliminationType.SixtyFourthRound:
                return(EliminationType.ThirtySecondRound);

            case EliminationType.ThirtySecondRound:
                return(EliminationType.SixteenthRound);

            case EliminationType.SixteenthRound:
                return(EliminationType.QuarterFinal);

            case EliminationType.QuarterFinal:
                return(EliminationType.SemiFinal);

            case EliminationType.SemiFinal:
                return(EliminationType.Final);

            case EliminationType.Final:
                return(null);

            default:
                throw new NotSupportedException($"Le type de l'étape n'est pas supporté. Type:{actualStep}.");
            }
        }
예제 #3
0
        public static int IndexStep(EliminationType firstStep)
        {
            switch (firstStep)
            {
            case EliminationType.SixtyFourthRound:
                return(5);

            case EliminationType.ThirtySecondRound:
                return(4);

            case EliminationType.SixteenthRound:
                return(3);

            case EliminationType.QuarterFinal:
                return(2);

            case EliminationType.SemiFinal:
                return(1);

            case EliminationType.Final:
                return(0);

            default:
                throw new NotSupportedException($"Le type de l'étape n'est pas supporté. Type:{firstStep}.");
            }
        }
예제 #4
0
 /// <summary>
 ///     Instance a new QualificationStepSetting with specified param
 /// </summary>
 /// <param name="matchSetting">Set match setting for qualification step</param>
 /// <param name="mainEliminationStep">First eliminiation step for main phase</param>
 /// <param name="countGroup">Set number of qualification group when type of phase is qualification, else null</param>
 /// <param name="matchWithRevenche">Set to true if you want two match by team</param>
 public QualificationStepSetting(MatchSetting matchSetting, ushort countGroup,
                                 EliminationType mainEliminationStep, bool matchWithRevenche)
     : base(matchSetting)
 {
     SetCountGroup(countGroup, mainEliminationStep);
     MatchWithRevenche = matchWithRevenche;
 }
예제 #5
0
 /// <summary>
 ///     Instance a new QualificationStepSetting with specified param
 /// </summary>
 /// <param name="matchSetting">Set match setting for qualification step</param>
 /// <param name="mainEliminationStep">First eliminiation step for main phase</param>
 /// <param name="countTeamQualified">Set number team qualified by group when type of phase is qualification, else null</param>
 /// <param name="matchWithRevenche">Set to true if you want two match by team</param>
 public QualificationStepSetting(MatchSetting matchSetting, EliminationType mainEliminationStep,
                                 ushort countTeamQualified, bool matchWithRevenche)
     : base(matchSetting)
 {
     MatchWithRevenche = matchWithRevenche;
     SetCountQualifiedTeam(mainEliminationStep, countTeamQualified);
 }
예제 #6
0
        /// <summary>
        ///     Set value of CountGroup, CountQualifiedTeam and CountFishedTeam in according with business rules
        /// </summary>
        /// <param name="mainEliminationStep">First eliminiation step for main phase</param>
        /// <param name="countGroup">Set number of qualification group when type of phase is qualification, else null</param>
        public void SetCountGroup(ushort countGroup, EliminationType mainEliminationStep)
        {
            ushort countTeamQualified, countTeamFished;

            ComputeGroup(countGroup, mainEliminationStep, out countTeamQualified, out countTeamFished);
            CountGroup         = countGroup;
            CountTeamQualified = countTeamQualified;
            CountTeamFished    = countTeamFished;
        }
예제 #7
0
 /// <summary>
 ///     Instance a new EliminationStepSetting with specified param
 /// </summary>
 /// <param name="matchSetting">Set match setting for qualification step</param>
 /// <param name="firstStep">Set the first step for elimination step</param>
 public EliminationStepSetting(IMatchSetting matchSetting, EliminationType firstStep)
     : base(matchSetting)
 {
     FirstStep = firstStep;
 }
예제 #8
0
 public static void ComputeGroup(ushort countGroup, EliminationType eliminationStep,
                                 out ushort countTeamQualified, out ushort countFishedTeam)
 {
     countTeamQualified = (ushort)((ushort)eliminationStep * 2 / countGroup);
     countFishedTeam    = (ushort)((ushort)eliminationStep * 2 % countGroup);
 }