Represent a single operation that can occur during the ETL process
Inheritance: WithLoggingMixin, IFdoOperation
 /// <summary>
 /// Called when a row is processed.
 /// </summary>
 /// <param name="op">The operation.</param>
 /// <param name="dictionary">The dictionary.</param>
 protected override void OnFeatureProcessed(FdoOperationBase op, FdoRow dictionary)
 {
     if (op.Statistics.OutputtedRows % this.ReportFrequency == 0)
     {
         if (op is FdoOutputOperation)
         {
             string className = (op as FdoOutputOperation).ClassName;
             SendMessageFormatted("[Conversion => {0}]: {1} features processed", className, op.Statistics.OutputtedRows);
         }
     }
 }
 /// <summary>
 /// Called when this process has finished processing.
 /// </summary>
 /// <param name="op">The op.</param>
 protected override void OnFinishedProcessing(FdoOperationBase op)
 {
     if (op is FdoOutputOperation)
     {
         string className = (op as FdoOutputOperation).ClassName;
         SendMessageFormatted("[Conversion => {0}]: {1} features processed in {2}", className, op.Statistics.OutputtedRows, op.Statistics.Duration.ToString());
     }
 }
 /// <summary>
 /// Called when this process has finished processing.
 /// </summary>
 /// <param name="op">The op.</param>
 protected override void OnFinishedProcessing(FdoOperationBase op)
 {
     if (op is FdoBatchedOutputOperation)
     {
         FdoBatchedOutputOperation bop = op as FdoBatchedOutputOperation;
         string className = bop.ClassName;
         SendMessageFormatted("[{0}]: {1}", this.Name, op.Statistics.ToString());
     }
     else if (op is FdoOutputOperation)
     {
         string className = (op as FdoOutputOperation).ClassName;
         SendMessageFormatted("[{0}]: {1}", this.Name, op.Statistics.ToString());
     }
 }