modules/FeedProcessor/ProcessorFactory.psm1
using module '..\Enums.psm1' using module '.\ProcessorBase.psm1' using module '.\BetgeniusProcessor.psm1' using module '.\BetradarProcessor.psm1' using module '.\LSportsProcessor.psm1' using module '.\RampProcessor.psm1' using module '.\SingularProcessor.psm1' class ProcessorFactory { hidden static [Processor[]] $processors # @{ producer; feedId; source) hidden static [hashtable] $mapProducerSource hidden static [hashtable] $mapFeedProducer hidden static [hashtable] $mapFeedSource static [hashtable] $mapExternalKeyPrefix static [string[]] $producers static [Processor] getBySource([SOURCE] $source){ foreach ($processor in [ProcessorFactory]::processors) { if ($processor.source -eq $source) { return $processor } } return $null } static [Processor] getByFeedId([int] $feedId) { foreach ($processor in [ProcessorFactory]::processors) { if ($processor.feedId -eq $feedId) { return $processor } } return $null } static [SOURCE] getSourceByProducer([string] $name){ return [ProcessorFactory]::mapProducerSource[$name] } static [string] getProducerByFeedId([int] $id){ return [ProcessorFactory]::mapFeedProducer[$id] } static [string] getProducersBySource([SOURCE] $source){ $retValue = @() foreach ($key in [ProcessorFactory]::mapProducerSource.Keys) { if ([ProcessorFactory]::mapProducerSource[$key] -eq $source){ $retValue += $key} } return $retValue } static [SOURCE] getSourceByFeedId([int] $id) { return [ProcessorFactory]::mapFeedSource[$id] } #Create an instance static [void] Init([hashtable] $processorTypes) { [ProcessorFactory]::processors = @() [ProcessorFactory]::mapProducerSource = @{} [ProcessorFactory]::mapFeedProducer = @{} [ProcessorFactory]::mapFeedSource = @{} [ProcessorFactory]::mapExternalKeyPrefix = @{} $needFeedProducer = @() foreach ($pt in $processorTypes.GetEnumerator()) { foreach ($p in $pt.Value) { $processorObj = (New-Object -TypeName "$p" -ArgumentList ($pt.key)) if ($processorObj.needFeedProducer) { $needFeedProducer += $processorObj } [SOURCE] $source = $processorObj.source [hashtable] $itemProducers = $processorObj.producers [ProcessorFactory]::processors += $processorObj foreach ($item in $itemProducers.GetEnumerator()) { if (-not [ProcessorFactory]::mapFeedProducer.ContainsKey($item.value)){ [ProcessorFactory]::mapFeedProducer.Add($item.value, $item.key) } if (-not [ProcessorFactory]::mapProducerSource.ContainsKey($item.key)){ [ProcessorFactory]::mapProducerSource.Add($item.key, $source) } if (-not [ProcessorFactory]::mapFeedSource.ContainsKey($item.value)){ [ProcessorFactory]::mapFeedSource.Add($item.value, $source) } } [ProcessorFactory]::mapExternalKeyPrefix += $processorObj.mapExternalKeyPrefix } } foreach ($processorObj in $needFeedProducer) { $processorObj.mapFeedProducer = [ProcessorFactory]::mapFeedProducer } } } |