/// <summary> /// A data processor has access to source data cookers, composite data cookers, as well as other /// data processors. /// </summary> /// <param name="dataProcessorId"> /// Identifies the data processor. /// </param> /// <returns> /// A set of data uniquely tailored to this data processor. /// </returns> public IDataExtensionRetrieval CreateDataRetrievalForDataProcessor( DataProcessorId dataProcessorId) { var filteredData = this.dataRetrievalCache.GetDataProcessorFilteredData(dataProcessorId); if (filteredData != null) { return(filteredData); } var dataProcessorReference = this.DataExtensionRepository.GetDataProcessorReference(dataProcessorId); if (dataProcessorReference == null) { throw new ArgumentException("Data retrieval requested for data processor not found in repository."); } if (dataProcessorReference.Availability != DataExtensionAvailability.Available) { throw new ArgumentException("Data retrieval requested for data processor that is not available."); } filteredData = new FilteredDataRetrieval(this, dataProcessorReference.DependencyReferences); this.dataRetrievalCache.AddDataProcessorFilteredData(dataProcessorId, filteredData); return(filteredData); }
/// <inheritdoc/> public object QueryDataProcessor(DataProcessorId dataProcessorId) { Guard.NotNull(dataProcessorId, nameof(dataProcessorId)); if (!this.extensionDependencies.RequiredDataProcessorIds.Contains(dataProcessorId)) { throw new ArgumentException( $"The requested data processor is not available: {dataProcessorId}. " + "Consider adding it to the requirements for this data extension.", nameof(dataProcessorId)); } var processorReference = this.dataRetrievalFactory.DataExtensionRepository.GetDataProcessorReference(dataProcessorId); if (processorReference == null) { throw new InvalidOperationException( $"Failed to retrieve a reference to data processor: {dataProcessorId}."); } var processorDataRetrieval = this.dataRetrievalFactory.CreateDataRetrievalForDataProcessor(dataProcessorId); return(processorReference.GetOrCreateInstance(processorDataRetrieval)); }
internal void AddDataProcessorFilteredData(DataProcessorId dataProcessorId, IDataExtensionRetrieval data) { Debug.Assert(data != null, nameof(data)); lock (this.processorCacheLock) { this.dataProcessorCache[dataProcessorId] = new System.WeakReference <IDataExtensionRetrieval>(data); } }
public IDataProcessorReference GetDataProcessorReference(DataProcessorId dataProcessorId) { if (this.dataProcessorsById.TryGetValue(dataProcessorId, out var processorReference)) { return(processorReference); } return(this.getDataProcessor?.Invoke(dataProcessorId)); }
internal IDataExtensionRetrieval GetDataProcessorFilteredData(DataProcessorId dataProcessorId) { lock (this.processorCacheLock) { if (this.dataProcessorCache.TryGetValue(dataProcessorId, out var filteredDataReference)) { if (filteredDataReference.TryGetTarget(out var filteredData)) { return(filteredData); } } } return(null); }
/// <summary> /// Specifies the given /// data processor as required for this extension. /// </summary> /// <param name="cookerPath"> /// The cooker path. /// </param> protected void AddRequiredDataProcessor(DataProcessorId processorId) { this.requiredDataProcessors.Add(processorId); }
public void AddRequiredDataProcessorId(DataProcessorId dataProcessorId) { this.requiredDataProcessorIds.Add(dataProcessorId); }
public IDataProcessorReference GetDataProcessorReference(DataProcessorId dataProcessorId) { return(this.dataProcessors.FirstOrDefault(reference => StringComparer.Ordinal.Equals(reference.Id, dataProcessorId))); }