// this matches what we have in SourceDataCookerReference - it's not 100% necessary,
 // but it's a nice to have for testing some scenarios
 //
 public void DefaultAdditionalValidation(
     IDataExtensionDependencyStateSupport dependencyStateSupport,
     IDataExtensionReference reference)
 {
     if (reference is IDataCookerReference dataCookerReference)
     {
         if (!StringComparer.Ordinal.Equals(dataCookerReference.Path.SourceParserId, this.Path.SourceParserId))
         {
             dependencyStateSupport.AddError("Wrong source parser!");
             dependencyStateSupport.UpdateAvailability(DataExtensionAvailability.Error);
         }
     }
     else if (reference is IDataProcessorReference dataProcessorReference)
     {
         dependencyStateSupport.AddError(
             $"A source data cooker may not depend on a data processor: {dataProcessorReference.Id}");
         dependencyStateSupport.UpdateAvailability(DataExtensionAvailability.Error);
     }
     else
     {
         dependencyStateSupport.AddError(
             $"A requested dependency on an unknown data extension type is not supported: {reference.Name}");
         dependencyStateSupport.UpdateAvailability(DataExtensionAvailability.Error);
     }
 }
Exemple #2
0
        public override void PerformAdditionalDataExtensionValidation(
            IDataExtensionDependencyStateSupport dependencyStateSupport,
            IDataExtensionReference requiredDataExtension)
        {
            Guard.NotNull(dependencyStateSupport, nameof(dependencyStateSupport));
            Guard.NotNull(requiredDataExtension, nameof(requiredDataExtension));
            Debug.Assert(!string.IsNullOrWhiteSpace(this.Path.SourceParserId));

            // a source data cooker may not rely on any other source
            // a source data cooker may not rely on a non-source data cooker
            // a source data cooker may not rely on data processors

            if (requiredDataExtension is IDataCookerReference dataCookerReference)
            {
                if (!StringComparer.Ordinal.Equals(this.Path.SourceParserId, dataCookerReference.Path.SourceParserId))
                {
                    dependencyStateSupport.AddError("A source data cooker may not depend on data cookers from " +
                                                    $"other sources: {this.Type}");
                    dependencyStateSupport.UpdateAvailability(DataExtensionAvailability.Error);
                }
                else if (!(requiredDataExtension is SourceDataCookerReference))
                {
                    dependencyStateSupport.AddError(
                        $"Data cooker {dataCookerReference.Path} referenced by {this.Path} is unrecognized.");
                }

                if (ProductionStrategy == DataProductionStrategy.AsRequired)
                {
                    if (((SourceDataCookerReference)requiredDataExtension).ProductionStrategy != DataProductionStrategy.AsRequired)
                    {
                        throw new InvalidOperationException(
                                  $"A SourceCooker whose {nameof(DataProductionStrategy)} is " +
                                  $"{nameof(DataProductionStrategy.AsRequired)} can only consume SourceCookers whose " +
                                  $"{nameof(DataProductionStrategy)} is also {nameof(DataProductionStrategy.AsRequired)}.");
                    }
                }
            }
            else if (requiredDataExtension is IDataProcessorReference dataProcessorReference)
            {
                dependencyStateSupport.AddError(
                    $"A source data cooker may not depend on a data processor: {dataProcessorReference.Id}");
                dependencyStateSupport.UpdateAvailability(DataExtensionAvailability.Error);
            }
            else
            {
                dependencyStateSupport.AddError(
                    $"A requested dependency on an unknown data extension type is not supported: {requiredDataExtension.Name}");
                dependencyStateSupport.UpdateAvailability(DataExtensionAvailability.Error);
            }
        }
 public override void PerformAdditionalDataExtensionValidation(
     IDataExtensionDependencyStateSupport dependencyStateSupport,
     IDataExtensionReference requiredDataExtension)
 {
     if (this.UseDefaultValidation)
     {
         this.DefaultAdditionalValidation(dependencyStateSupport, requiredDataExtension);
     }
     else
     {
         base.PerformAdditionalDataExtensionValidation(
             dependencyStateSupport,
             requiredDataExtension);
     }
 }
Exemple #4
0
 /// <inheritdoc/>
 public virtual void PerformAdditionalDataExtensionValidation(
     IDataExtensionDependencyStateSupport dependencyStateSupport,
     IDataExtensionReference requiredDataCooker)
 {
 }
Exemple #5
0
 public virtual void PerformAdditionalDataExtensionValidation(
     IDataExtensionDependencyStateSupport dependencyStateSupport,
     IDataExtensionReference requiredDataExtension)
 {
     this.performAdditionalDataExtensionValidation?.Invoke(dependencyStateSupport, requiredDataExtension);
 }
Exemple #6
0
 public void PerformAdditionalDataExtensionValidation(
     IDataExtensionDependencyStateSupport dependencyStateSupport,
     IDataExtensionReference requiredDataCooker)
 {
     this.validationAction?.Invoke(dependencyStateSupport, requiredDataCooker);
 }