code: @Override
      public void setState(TransferState state) {
          super.setState(state);
  
          switch (state) {
          case Waiting:
              fireProgressEvent(ProgressEventType.TRANSFER_PREPARING_EVENT);
              break;
          case InProgress:
              if ( subTransferStarted.compareAndSet(false, true) ) {
                  /* The first InProgress signal */
                  fireProgressEvent(ProgressEventType.TRANSFER_STARTED_EVENT);
              }
              /* Don't need any event code update for subsequent InProgress signals */
              break;
          case Completed:
              fireProgressEvent(ProgressEventType.TRANSFER_COMPLETED_EVENT);
              break;
          case Canceled:
              fireProgressEvent(ProgressEventType.TRANSFER_CANCELED_EVENT);
              break;
          case Failed:
              fireProgressEvent(ProgressEventType.TRANSFER_FAILED_EVENT);
              break;
          default:
              break;
          }
      }
docs: Override this method so that TransferState updates are also sent out to the
  progress listener chain in forms of ProgressEvent.