/// <summary> /// Builds the <see cref="ISportEvent" /> derived class based on specified id /// </summary> /// <typeparam name="T">A <see cref="ISportEvent" /> derived type</typeparam> /// <param name="eventId">The identifier</param> /// <param name="sportId">The sport identifier</param> /// <param name="cultures">The cultures used for returned instance</param> /// <param name="exceptionStrategy">A <see cref="ExceptionHandlingStrategy"/> enum member specifying how the build instance will handle potential exceptions</param> /// <returns>The constructed <see cref="ICompetition"/> derived instance</returns> public T BuildSportEvent <T>(URN eventId, URN sportId, IEnumerable <CultureInfo> cultures, ExceptionHandlingStrategy exceptionStrategy) where T : ISportEvent { ISportEvent sportEvent; switch (eventId.TypeGroup) { case ResourceTypeGroup.MATCH: { if (sportId != null && _soccerSportUrns.Contains(sportId)) { sportEvent = new SoccerEvent(eventId, sportId, this, _sportEventCache, _eventStatusCache, _matchStatusCache, cultures, exceptionStrategy); } else { sportEvent = new Match(eventId, sportId, this, _sportEventCache, _eventStatusCache, _matchStatusCache, cultures, exceptionStrategy); } break; } case ResourceTypeGroup.STAGE: { sportEvent = new Stage(eventId, sportId, this, _sportEventCache, _sportDataCache, _eventStatusCache, _matchStatusCache, cultures, exceptionStrategy); break; } case ResourceTypeGroup.BASIC_TOURNAMENT: { sportEvent = new BasicTournament(eventId, sportId, this, _sportEventCache, _sportDataCache, cultures, exceptionStrategy); break; } case ResourceTypeGroup.TOURNAMENT: { sportEvent = new Tournament(eventId, sportId, this, _sportEventCache, _sportDataCache, cultures, exceptionStrategy); break; } case ResourceTypeGroup.SEASON: { sportEvent = new Season(eventId, sportId, this, _sportEventCache, _sportDataCache, cultures, exceptionStrategy); break; } case ResourceTypeGroup.DRAW: { sportEvent = new Draw(eventId, sportId, _sportEventCache, cultures, exceptionStrategy); break; } case ResourceTypeGroup.LOTTERY: { sportEvent = new Lottery(eventId, sportId, _sportEventCache, _sportDataCache, cultures, exceptionStrategy); break; } case ResourceTypeGroup.UNKNOWN: { ExecutionLog.Warn($"Received entity with unknown resource type group: id={eventId}, sportId={sportId}"); sportEvent = new SportEvent(eventId, sportId, null, _sportEventCache, cultures, exceptionStrategy); break; } default: throw new ArgumentException($"ResourceTypeGroup:{eventId.TypeGroup} is not supported", nameof(eventId)); } return((T)sportEvent); }
/// <summary> /// Builds the <see cref="ISportEvent" /> derived class based on specified id /// </summary> /// <typeparam name="T">A <see cref="ISportEvent" /> derived type</typeparam> /// <param name="id">The identifier</param> /// <param name="sportId">The sport identifier</param> /// <param name="cultures">The cultures used for returned instance</param> /// <param name="exceptionStrategy">A <see cref="ExceptionHandlingStrategy"/> enum member specifying how the build instance will handle potential exceptions</param> /// <returns>The constructed <see cref="ICompetition"/> derived instance</returns> public T BuildSportEvent <T>(URN id, URN sportId, IEnumerable <CultureInfo> cultures, ExceptionHandlingStrategy exceptionStrategy) where T : ISportEvent { ISportEvent sportEvent; switch (id.TypeGroup) { case ResourceTypeGroup.MATCH: { if (sportId != null && sportId.Equals(URN.Parse("sr:sport:1"))) { sportEvent = new SoccerEvent(id, sportId, this, _sportEventCache, _eventStatusCache, _matchStatusCache, cultures, exceptionStrategy); } else { sportEvent = new Match(id, sportId, this, _sportEventCache, _eventStatusCache, _matchStatusCache, cultures, exceptionStrategy); } break; } case ResourceTypeGroup.STAGE: { sportEvent = new Stage(id, sportId, this, _sportEventCache, _sportDataCache, _eventStatusCache, _matchStatusCache, cultures, exceptionStrategy); break; } case ResourceTypeGroup.BASIC_TOURNAMENT: { sportEvent = new BasicTournament(id, sportId, this, _sportEventCache, _sportDataCache, cultures, exceptionStrategy); break; } case ResourceTypeGroup.TOURNAMENT: { sportEvent = new Tournament(id, sportId, this, _sportEventCache, _sportDataCache, cultures, exceptionStrategy); break; } case ResourceTypeGroup.SEASON: { sportEvent = new Season(id, sportId, this, _sportEventCache, _sportDataCache, cultures, exceptionStrategy); break; } case ResourceTypeGroup.DRAW: { sportEvent = new Draw(id, sportId, _sportEventCache, cultures, exceptionStrategy); break; } case ResourceTypeGroup.LOTTERY: { sportEvent = new Lottery(id, sportId, _sportEventCache, _sportDataCache, cultures, exceptionStrategy); break; } case ResourceTypeGroup.UNKNOWN: { sportEvent = new SportEvent(id, sportId, null, _sportEventCache, cultures, exceptionStrategy); break; } default: throw new ArgumentException($"ResourceTypeGroup:{id.TypeGroup} is not supported", nameof(id)); } return((T)sportEvent); }