UnifiedFeed SDK - Java2

Versions: (7/20/2023) recommended
Stages can be of SprintRace type (5/17/2023)
CustomBetManager respects ExceptionHandlingStrategy for all non-argument-validating exceptions
CustomBetManager now throws CommunicationException on API failures
API failures across the board carry to the client: url used and http code returned
BookingManager respects ExceptionHandlingStrategy for CommunicationExceptions (1/26/2023)
Added support for group urn type
Fix ignore fixture_change_fixture endpoint for virtual producers (1/12/2023)
Fix: GlobalReplay environment not discards messages from disabled packages for the customer (1/9/2023)
Fix: TLS version selection for RabbitMq connection no longer causes a crash in certain JVMs (12/27/2022)
Fix: Artifact descriptor in maven central is fixed, so that SDK is usable in maven projects again (12/23/2022)
Added GlobalReplay environment (9/20/2022)
CustomBet - added support for calculate-filter endpoint
Fix: http request logged twice
Fix: NPE when LocalizedNamedValue does not have description (7/15/2022)
Fix: recovery request url when configuring custom environment
Fix: handling for system session connection reset (6/2/2022)
Added method isOpen to OddsFeed
Feed close cleanup improvements (cache items invalidated, session closed) (5/6/2022)
Fix: fast HttpClient timeout fixed (4/26/2022)
*** Contains critical bug and should not be used. Use version ***
Separate HttpClient for critical and other requests
Added configuration option for fast HttpClient in OperationManager (default timeout 5s)
Extended SportsInfoManager with getTimelineEvents
Improved how SportInfoManager is handling exceptions
Improved logging for raw data events (2/23/2022)
Added getBetradarName to Round
Improvement: handling of alive messages in regard to producer status
Fix: multiple connections in case of disconnection
Fix: Competition competitors did not expose IsVirtual correctly (1/20/2022)
Fix: after disconnection some feed messages can not be deserialized (12/10/2021)
Added support for event results in SportEventStatus received from api
Extended MarketDescriptionManager with parallelPrefetchVariantMarketDescriptions
Improved logging exception during message consumption
Fix: connecting to replay server with production token
Fix: setting custom configuration from properties files
Fix: loading competitor associated players data from match summary
Fix: throws exception if match, stage or draw not found exception happens (11/18/2021)
Improvements for connection resilience
Added onRecoveryInitiate to SDKProducerStatusListener
Added RabbitConnectionTimeout and RabbitHeartbeat to OperationManager
Improved logging regarding connection and recovery process
Fix: how connection and channels are made
Extended StageType with Run enum value
Changed default UF environment from Integration to GlobalIntegration (10/6/2021)
Extended configuration with ufEnvironment attribute
Extended TokenSetter and EnvironmentSelector
New values added to Environment enum (GlobalIntegration, GlobalProduction, ProxySingapore, ProxyTokyo) (9/9/2021)
When fetching non-cached fixture change endpoint fails due to server error, try also normal fixture endpoint
Update: default timeout for max recovery time set to 1h
Fix: Properly fetch multiple languages for categories
Other minor improvements and bug fixes (7/23/2021)
Extended Stage with getStatus returning StageStatus (with match status) (6/23/2021)
Added OperationManager to provide option to set sdk values (before OddsFeed instance creation)
Added option to ignore sport event status from timeline endpoint for BetPal events (6/15/2021)
Added pitcher, batter, pitch_count, pitches_seen, total_hits, total_pitches to SportEventStatus properties
PeriodScore - match status code 120 mapped to penalties
Connecting to rabbit with the newest supported SSL protocol
Fix: Re-fetching variant market descriptions after deleting the SDK cache for an event
Fix: merging tournament groups (5/28/2021)
OutcomeProbabilities extended with getAdditionalProbabilities
Extended MarketWithProbabilities with getMarketMetaData
Extended Tournament with getSchedule (4/29/2021)
Added SportInfoManager.getPeriodStatuses to fetch period summary for stages
Extended CompetitionStatus with getPeriodOfLadder (4/9/2021)
fix: converting GoalScorer
fix: importing Venue (4/2/2021)
fix: parsing TeamStatisticsDTO for sportEventStatusDTO (3/31/2021)
added getEventChangeManager() to OddsFeed for a periodical fixture and result change updates
changed return value type for TimelineEvent.getPlayer() from Player to EventPlayer (breaking change)
changed return value type for TimelineEvent.getGoalScorer() from Player to GoalScorer (breaking change)
extended Player with GoalScorer (added getMethod()) used in TimelineEvent
extended Player with EventPlayer (added getBench()) used in TimelineEvent
added Competitor.getShortName
added Fixture.ProducerInfo.isInLiveMatchTracker
reverted populating Round name, groupName and phaseOrGroupLongName to exactly what is received from API
added getStartTime, getEndTime and getAamsId to the MarketMetaData
added PeriodOfLeader to the SportEventStatus.Properties
updated FixtureChangeType - also if not specified in fixtureChange message returns FixtureChangeType.NotAvailable
improved connection error reporting
fix: WNS event ids can have negative value
fix: NPE merging tournament groups
fix: merging tournament groups (when no name or id)
fix: exporting/importing data (2/9/2021)
added support for eSoccer - returns SoccerEvent instead of Match
added SportsInfoManager.getLotteries
added support for simple_team urn
improved example to support all desired locales
fix: merging tournament groups
fix: merging tournament data
fix: NPE in data router fixture handling (12/18/2020)
fix: NPE in case of missing market description
improved logging

2.0.42 (11/13/2020)
added new stage types in StageType enum (Practice, Qualifying, QualifyingPart, Lap)
fix: use competitor data from fixture.xml API enpoint
fix: loading sportEventType and stageType from parent stage if available
fix: parsing outcomes
fix: restarting recovery timestamp fixed when alive violation happened during previous one

2.0.41 (10/13/2020)
Round - added getGroup, added getGroupName (breaking change)
Stage - added getAdditionalParentStages, getStageType (breaking change - result changed from SportEventType to StageType)
extended EventResult with getDistance and getCompetitorResult methods
Competition extended with getLiveOdds and getSportEventType methods
added getCourse to the Venue
added Coverage to IMatch
optimized message deserialization
optimized fetching outcome names for multiple languages
improved connection error handling and reporting
improved fetching of multiple locales for market names
fix: allow null values when fetching multiple locales for market names
fix: added support for indonesian locale
fix: event status enumeration (9/22/2020)
added MaxConnPerRoute and MaxConnTotal configuration for HTTP client

2.0.40 (8/19/2020)
extended SeasonInfo with startDate, endDate, year and tournamentId
fix: CustomBetManager return new CustomBetSelectionBuilder
fix: make serialize synchronised
fix: fetching market description are marked done only after successful obtaining data
fix: Immutable map exception parsing competitor references
fix: un-needed URN parse exception logging
fix: using ReplayOddsFeed with integration token
fix: how after parameter is sent in getFixtureChanges
fix: reloading market description in case variant descriptions are not available
improved logging of initial message processing

2.0.39 (7/9/2020)
added getSport() and getCategory() to Competitor interface
throttling recovery requests
fix: closing recovery HTTP client on OddsFeed.close()

2.0.38 (6/24/2020)
added overloaded methods for fixture and result changes with filters
added separate HTTP request timeout value for recovery endpoints
updated supported languages
improved reporting of invalid message interest combinations
fix: NPE when obtaining market descriptions

2.0.37 (5/11/2020)
added support for result changes endpoint
fix: responses are encoded/decoded using UTF-8
fix: lotteries endpoint isn't invoked if WNS is disabled

2.0.36 (4/16/2020)
added getSchedule method to BasicTournament interface
added bookmakerId to the ClientProperties
fix: new Replay API endpoint supports both production and integration tokens
fix: exporting Fixture cache items (3/25/2020)
changed Replay API URL

2.0.35 (3/23/2020)
added support for HTTP(S) proxies

2.0.34 (3/16/2020)
fix: fetching outcome mappings
fix: loading sport events after cache import
improved HTTP request logging
improved handling user exceptions inside listener callbacks

2.0.33 (2/18/2020)
added getState() to the Competitor
added getState() to the Venue
improved fetching fixtures for Replay environment
improved loading configuration from files
fix: handling sports without tournaments added new Replay API endpoints

2.0.32 (1/14/2020)
added new Replay API endpoints
improved market and variant caching
fix: fetching outcome mappings for special markets that exists only on dynamic variant endpoint (12/10/2019)
fix: fetching and merging player profile data

2.0.31 (12/9/2019)
added getReplaySportEventsList to the ReplayManager
added missing summary endpoint competitors caching
added example for parsing messages in separate thread
improved logic for getting player profiles
improved fetching and loading PeriodStatistics
fix: loading playerprops variant market descriptions
fix: logging for HTTP POST requests

2.0.30 (11/8/2019)
fix: better market description cache handling

2.0.29 (10/24/2019)
added cache state export/import
added getAdditionalProbabilities() to the OutcomesOdds
added getAgeGroup to the Competitor
added getGreenCards() to the TeamStatistics
added Statistics to the SportEventStatus.toKeyValueStore()
improved parsing dates without timezone
fix: possible multi-thread issues caching competitors
fix: Manager.getNationality returned name
fix: replay ignores messages from inactive producers
fix: odds format is now consistent with the documentation
fix: green card can be null in sport event statistics

2.0.28 (9/5/2019)
exposed option to delete old matches from cache (SportInfoManager.deleteSportEventsFromCache)
loading home and away penalty score from penalty PeriodScore if present
fix: updated CustomConfigurationBuilder not to override pre-configured values
fix: interrupted recoveries are restarted on alive message
fix: SportInfoManager.getCompetitonsFor(Date, Locale) invokes for correct locale

2.0.27 (7/18/2019)
added getListOfSportEvents and getAvailableTournaments to the SportInfoManager
added isDecidedByFed to the MatchStatus
added getRaceDriver to the Competitor
added isExhibitionGames to the BasicTournament and Tournament
added getId to the Group
added getName to the TeamStatistics
fix: not loading variant market data in multi-language scenario

2.0.26 (6/21/2019)
added isStartTimeTbd and getReplacedBy to the SportEvent
added getStripesColor, getSplitColor, getShirtType and getSleeveDetail to the Jersey
added getMatchStatusCode to PeriodScore
improved on updating when new outcomes are available (outrights)
exposed option for user to receive raw feed and api data

2.0.25 (6/7/2019)
added getDivision to the TeamCompetitor
added getGender to the Competitor and PlayerProfile
added getStreamUrl to the TvChannel
added getPhase to the Round
CompetitionStatus.getStatus() no more deprecated (fixed underlining issue)
improved caching of variant market descriptions
fix: wrong periodType in PeriodScore

2.0.24 (5/22/2019)
added support for custom bets
added customBetManager and getAvailableLanguages to the OddsFeed
added setSpecificEventsOnly to the OddsFeedSessionBuilder
added getFixtureChanges to the SportsInfoManager interface
exposed option to reload market descriptions
fix: preserving the order of default and desired locales in configuration
fix: return cached event status for sport events

2.0.23 (4/18/2019)
exposed Round.getGroupId()
improved handling of SportEventStatus updates
fix: incorrect message validation
fix: initial value for eventStatus

2.0.22 (4/8/2019)
added support for non-cached fixture endpoint
improved fetching logic for the summary endpoint
fix: handling pre:outcometext and simpleteam ids in cache
fix: null check for names in Category and Sport

2.0.21 (3/12/2019)
exposed EventResult.getGrid()
exposed Reference.getAamsId()
added support for ReferenceIds for competitors within season/tournament groups
added support for simpleteam competitors and related API calls
improved recovery logic on channel disconnect
improved how type on PeriodScore is loaded
added runParallel argument on play method on ReplayManager
fix: null check for names in Category and Sport
fix: how periods score data is saved and exposed (period type and description was wrong)

2.0.20 (2/14/2019)
exposed getTimestamps() on Message
added getRecoveryInfo() (info about last recovery) to the Producer
added support for replay feed to the Feed instance
fix: MarketMappingDataImpl.canMap - added producerId check
fix: Sport.getCategories now returns all categories, delayed fetching until needed
fix: Locking problem with market description fetching
fix: null check when mapping CoveredFrom
fix: added null check in PeriodScoreImpl
note: artifact moved to maven central (1/9/2019)
fix: null check when mapping CoveredFrom enum

2.0.19 (1/7/2019)
added Fixture.CoverageInfo.CoveredFrom property
added getOutcomeType method to MarketDefinition (to replace includes_outcomes_of_type)
fix: Competitor.References - fixture is fetched only if competitor references are explicitly requested by user
fix: avoiding fetching fixture for BookingStatus when received via schedule

2.0.18 (12/18/2018)
added method getWillBeRestarted to SnapshotCompleted message
added OddsGenerationProperties to the OddsChange message
replay session using any token returns production replay summary endpoint
added support for custom api hosts (recovery for producers uses custom urls)
added Season start time and end time to exposed dates
renamed Staging to Integration environment
other minor fixes and improvements

2.0.17 (11/16/2018)
exposed BookmakerDetails on OddsFeed - exposing bookmakerId, serverTimeDifference and token expiration date
removed fetching of fixture for TournamentRound (only summary, if needed)
improved handling of competitor reference id(s)
minimized rest api calls - removed calls for eng, when not needed (requires language to be set in configuration)
outcomeSettlement default deadHeatFactor set to 1 (before 0)
removed purging of sportEventStatus on betSettlement message
fix: null bug for nodeId in configuration
fix: the ordinal name spelling for all languages

2.0.16 (10/17/2018)
added Competition.getStatusIfPresent() to retrieve if from cache without API call
added Match.getEventTimelineIfPresent() to retrieve if from cache without API call
added properties to TimelineEvent (goalScorer, player, assists,...)
added warn message for negative nodeId (negative id is reserved for internal use only)
improvement: added a dedicated executor for the RecoveryManager
fix: SportEventStatusCache considers source of status and cache timeout
fix: for null competitor abbreviation (must not be null)
fix: calling the summary with nodeId if specified (on replay server) - sport event status changes during replay of the match

2.0.15 (9/17/2018)
added new event status: EventStatus.Interrupted
updated api xsd schemas
added handling of PlayerCompetitor available in Competitor.Players
changed return type of method Competitor.getPlayers() to list of Player (to support players and competitors)
sport event EventStatus exposed directly on Competition.getEventStatus()
optimized data fetching on sport event (data from schedule for a day is not fetched again)

2.0.14 (8/24/2018)
added support for getting outcome odds in different formats - getOdds(OddsDisplayType)
AMQP threads named based on Bookmaker/nodeId
fix: added missing support for node_id on snapshot_complete routing keys
fix: added missing null checks for getMappings
fix: added null check when fetching sportId

2.0.13 (8/2/2018)
fix: competitor references are saved per sport event

2.0.12 (7/25/2018)
added check for feed opened before closing its components
added purging of Draw event data on BetStop and BetSettlement
added support for 2 routing keys for VirtualSports message interest
added support for new producer field (stateful_recovery_window_in_minutes)
added Pitcher info on SportEventConditions

2.0.11 (6/26/2018)
introduced a new "UnparsableMessage" callback
increased max concurrent HTTP requests to 15 (from 2)
fixed market cache refresh failure retry
added support for custom API IP (with custom port)
other minor fixes

2.0.10 (6/11/2018)
exposure of Fixture.getScheduledStartTimeChanges
exposure of Reference.getRotationNumber
fixed OutcomeMappingData.getProducerOutcomeId return value
fixed Competition.getVenue return value

2.0.9 (5/22/2018)
market/outcome name generation performance improvement(if the required data is cached)
fixed Stage.getParent(in some cases the "middle" parent stage was skipped and the method returned always the "top" level parent)
event competitors list cache logic updated(always overwrite instead of merge)
simpleteam caching logic update
log entries improved

2.0.8 (5/7/2018)
introduced the new SDKProducerStatusListener.onProducerStatusChange in favour of onProducerDown and onProducerUp
added support for node id on per event recoveries
fixed ReplayManager.getPlayStatus
removed unneeded YAML reader warning
fixed system time validation(some locales had issues while parsing the server response time)

2.0.7 (4/16/2018)
exposure of Fixture.getReplacedBy
exposure of Venue.getCountryCode
exposure of Round.getPhaseOrGroupLongName
sport event status caching improved
improved alive messages monitoring
added system time validation against API time
added support for YAML configuration
other logic and code improvements

2.0.6 (3/28/2018)
exposure of Fixture.getStartTimeTbd
added support for decimal results on "EventResult"(Stage entity results)
added the possibility to set a custom messaging virtual host on the CustomConfigurationBuilder
added sample SDK properties to the included example
added support to purge sport event status on demand(trough SportsInfoManager)
improved handling of "simpleteam" entities
when a match gets booked successfully, the SDK now updates the internal state of the booking status
minor fixes and improvements

2.0.5 (3/13/2018)
configuration build process refactored, previous build path was deprecated!
added a new market type - MarketCancel, accessible trough the BetCancel message
addition of the EventStatus.Postponed enum value
match status fetching logic improvements
fixed flex score market name generation (0.0 -> 0, 1.0 -> 1,...)
Fixture.getNextLiveTime date parsing fixed
improved handling of malformed market specifiers
added the possibility to get adjusted market mappings
added additional features to the ReplayManager play and playScenario methods
added support for using staging tokens on the replay server
added advanced replay event scenarios (available in the example project)
minor improvements on the feed session message interests checking
example projects updated to use staging as default environment
default staging broker URL fixed
log fixes and improvements

2.0.4 (2/20/2018)
exposure of additional information on the Fixture
added SDK support for MDC context tag(uf-sdk-tag)
improved recovery id generation logic
fixed ReplayManager.addSportEventToReplay method
improved WNS lotteries endpoint handling
minor fixes

2.0.3 (1/29/2018)
added support for the WNS producer
addition of "OutcomeResult" to OutcomeSettlement
OutcomeSettlement.isWinning deprecated in favour of "OutcomeResult"
entities ordinal name generation fix
other minor improvements and bug fixes

2.0.2 (1/15/2018)
added support for replay server node id
added support for seamless access to staging env(trough the configuration)
extended support for SDK configuration trough the properties file
exposure of named value ids(void reasons, betstop reason,...)
events cache improvements
variant markets caching update

2.0.1 (12/22/2017)
modification of the variant market name generation
introduced new fixture change types(the new types previously mapped to "OTHER")
further improvements on the cache loading system
added support for $event name template
added support for negative SDK node id
added additional replay server features(ReplayManager methods update)
default replay queue clearing removed
MarketMappingData.getProducerId deprecated, replaced with MarketMappingData.getProducerIds
PeriodStatistics.getTeamStatisticDTOS deprecated, replaced with PeriodStatistics.getTeamStatistics
EventClock.getRemainingDate deprecated, replaced with EventClock.getRemainingTime
other minor fixes/improvements/Javadoc fixes

2.0.0 (11/28/2017)
modification of the variant market name generation
addition of the Match.getEventTimeline
manual cache purge methods exposure
added support for LiveOdds booking
addition of the Tournament.getSeasons
additional player and competitor properties exposure
SDK node id support
javadoc fixes
improvements (tournament round loading, additional data exposure,..)
log improvements (API response messages, caching,..)
bug fixes
examples update

2.0.0 BETA-4 (11/6/2017)
SportEvent hierarchy overhaul - 'stage' support
added support for probability endpoints
improvements (player markets optimizations,..)
bug fixes

2.0.0 BETA-3 (10/9/2017)
Further recovery process improvements
Message validation
Virtual sports support
Addition of CurrentSeason.getSchedule()
Added additional examples
Added support for %server market name template
Various optimization to reduce GC impact on performance
Logs improvements
Other bug fixes
Minor Javadoc fixes

2.0.0 BETA-2 (9/18/2017)
Variant market name generation fix
Introduction of new ProducerDownReason and ProducerUpReason enum values
Added support for specific event recovery
Added a new method on the Producer object, getTimestampForRecovery - the return value of this method should be used to initiate a SDK recovery after a manual restart
Improved support for event name generation(SportEvent.getName(Locale))
Introduction of a sport specific type object -> SoccerEvent
Breaking change: the SportEventStatus was replaced with the CompetitionStatus(added support for soccer statistics,...)
Breaking change: introduced a new type of SportEvent called LongTerm event which is than extended by Tournament and Season
Recovery procedure improvements
Stability improvements
Improvement of various log entries
Javadoc improvements and fixes
Other bug fixes beta (8/28/2017)
Data translation fixes
Improved recovery manager
Improved Javadoc
Improved logs
Spelling corrections
PlayerOutcomeOdds introduction
Re-introduction of the enum PeriodType
SportsInfo interface renamed to SportsInfoManager
Replay feed initialization procedure updated
Added support for accessing sports without tournaments (SportsInfoManager.getSports())
And other fixes
NOTE: There will be minor changes in the SportEventStatus interface(including the addition of match statistics) alpha (7/25/2017)
Initial release