/// <summary> /// Initializes a new instance of the <see cref="SingleObjectTransfer"/> class. /// This constructor will check whether source and destination is valid for the operation: /// Uri is only valid for non-staging copy. /// cannot copy from local file/stream to local file/stream /// </summary> /// <param name="source">Transfer source.</param> /// <param name="dest">Transfer destination.</param> /// <param name="transferMethod">Transfer method, see <see cref="TransferMethod"/> for detail available methods.</param> public SingleObjectTransfer(TransferLocation source, TransferLocation dest, TransferMethod transferMethod) : base(source, dest, transferMethod) { if (null == source) { throw new ArgumentNullException("source"); } if (null == dest) { throw new ArgumentNullException("dest"); } if ((null != source.FilePath || null != source.Stream) && (null != dest.FilePath || null != dest.Stream)) { throw new InvalidOperationException(Resources.LocalToLocalTransferUnsupportedException); } if ((null != source.Blob) && (null != dest.Blob)) { if (source.Blob.BlobType != dest.Blob.BlobType) { throw new InvalidOperationException(Resources.SourceAndDestinationBlobTypeDifferent); } if (StorageExtensions.Equals(source.Blob, dest.Blob)) { throw new InvalidOperationException(Resources.SourceAndDestinationLocationCannotBeEqualException); } } if ((null != source.AzureFile) && (null != dest.AzureFile) && string.Equals(source.AzureFile.Uri.Host, dest.AzureFile.Uri.Host, StringComparison.OrdinalIgnoreCase) && string.Equals(source.AzureFile.Uri.AbsolutePath, dest.AzureFile.Uri.AbsolutePath, StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException(Resources.SourceAndDestinationLocationCannotBeEqualException); } this.transferJob = new TransferJob(this.Source, this.Destination); this.transferJob.Transfer = this; }
/// <summary> /// Initializes a new instance of the <see cref="SingleObjectTransfer"/> class. /// This constructor will check whether source and destination is valid for the operation: /// Uri is only valid for non-staging copy. /// cannot copy from local file/stream to local file/stream /// </summary> /// <param name="source">Transfer source.</param> /// <param name="dest">Transfer destination.</param> /// <param name="transferMethod">Transfer method, see <see cref="TransferMethod"/> for detail available methods.</param> public SingleObjectTransfer(TransferLocation source, TransferLocation dest, TransferMethod transferMethod) : base(source, dest, transferMethod) { Debug.Assert(source != null && dest != null); Debug.Assert( source.Type == TransferLocationType.FilePath || source.Type == TransferLocationType.Stream || source.Type == TransferLocationType.AzureBlob || source.Type == TransferLocationType.AzureFile || source.Type == TransferLocationType.SourceUri); Debug.Assert( dest.Type == TransferLocationType.FilePath || dest.Type == TransferLocationType.Stream || dest.Type == TransferLocationType.AzureBlob || dest.Type == TransferLocationType.AzureFile || dest.Type == TransferLocationType.SourceUri); Debug.Assert(!((source.Type == TransferLocationType.FilePath || source.Type == TransferLocationType.Stream) && (dest.Type == TransferLocationType.FilePath || dest.Type == TransferLocationType.Stream))); if (source.Type == TransferLocationType.AzureBlob && dest.Type == TransferLocationType.AzureBlob) { CloudBlob sourceBlob = (source as AzureBlobLocation).Blob; CloudBlob destBlob = (dest as AzureBlobLocation).Blob; if (sourceBlob.BlobType != destBlob.BlobType) { throw new InvalidOperationException(Resources.SourceAndDestinationBlobTypeDifferent); } if (StorageExtensions.Equals(sourceBlob, destBlob)) { throw new InvalidOperationException(Resources.SourceAndDestinationLocationCannotBeEqualException); } } if (source.Type == TransferLocationType.AzureFile && dest.Type == TransferLocationType.AzureFile) { CloudFile sourceFile = (source as AzureFileLocation).AzureFile; CloudFile destFile = (dest as AzureFileLocation).AzureFile; if (string.Equals(sourceFile.Uri.Host, destFile.Uri.Host, StringComparison.OrdinalIgnoreCase) && string.Equals(sourceFile.Uri.AbsolutePath, destFile.Uri.AbsolutePath, StringComparison.OrdinalIgnoreCase)) { throw new InvalidOperationException(Resources.SourceAndDestinationLocationCannotBeEqualException); } } this.transferJob = new TransferJob(this); }