/// <summary> /// Asynchronously creates an asset that does not contain any files and <see cref="AssetState"/> is Initialized. /// </summary> /// <param name="assetName">The asset name.</param> /// <param name="options">A <see cref="AssetCreationOptions"/> which will be associated with created asset.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns> /// An <see cref="Task"/> of type <see cref="IAsset"/>created according to the specified creation <paramref name="options"/>. /// </returns> public override Task<IAsset> CreateAsync(string assetName, AssetCreationOptions options,CancellationToken cancellationToken) { AssetData emptyAsset = new AssetData { Name = assetName, Options = (int) options }; emptyAsset.InitCloudMediaContext(this._cloudMediaContext); cancellationToken.ThrowIfCancellationRequested(); DataServiceContext dataContext = this._cloudMediaContext.DataContextFactory.CreateDataServiceContext(); dataContext.AddObject(AssetSet, emptyAsset); return dataContext .SaveChangesAsync(emptyAsset) .ContinueWith<IAsset>( t => { t.ThrowIfFaulted(); cancellationToken.ThrowIfCancellationRequested(); AssetData data = (AssetData) t.AsyncState; if (options.HasFlag(AssetCreationOptions.StorageEncrypted)) { using (var fileEncryption = new NullableFileEncryption()) { CreateStorageContentKey(data, fileEncryption, dataContext); } } return data; }); }
/// <summary> /// Asynchronously creates an asset for specified storage account. Asset does not contain any files and <see cref="AssetState" /> is Initialized. /// </summary> /// <param name="assetName">The asset name.</param> /// <param name="storageAccountName">The storage account name</param> /// <param name="options">A <see cref="AssetCreationOptions" /> which will be associated with created asset.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns> /// An <see cref="Task" /> of type <see cref="IAsset" />, where IAsset created according to the specified creation <paramref name="options" />. /// </returns> public override Task <IAsset> CreateAsync(string assetName, string storageAccountName, AssetCreationOptions options, CancellationToken cancellationToken) { AssetData emptyAsset = new AssetData { Name = assetName, Options = (int)options, StorageAccountName = storageAccountName }; emptyAsset.InitCloudMediaContext(this._cloudMediaContext); cancellationToken.ThrowIfCancellationRequested(); DataServiceContext dataContext = this._cloudMediaContext.DataContextFactory.CreateDataServiceContext(); dataContext.AddObject(AssetSet, emptyAsset); return(dataContext .SaveChangesAsync(emptyAsset) .ContinueWith <IAsset>( t => { t.ThrowIfFaulted(); cancellationToken.ThrowIfCancellationRequested(); AssetData data = (AssetData)t.AsyncState; if (options.HasFlag(AssetCreationOptions.StorageEncrypted)) { using (var fileEncryption = new NullableFileEncryption()) { CreateStorageContentKey(data, fileEncryption, dataContext); } } return data; })); }
private void InnerSubmit(DataServiceContext dataContext) { if (!string.IsNullOrWhiteSpace(this.TemplateId)) { dataContext.AddObject(JobBaseCollection.JobSet, this); foreach (IAsset asset in this.InputMediaAssets) { AssetData target = asset as AssetData; if (target == null) { throw new ArgumentException(StringTable.ErrorInputTypeNotSupported); } dataContext.AttachTo(AssetCollection.AssetSet, asset); dataContext.AddLink(this, InputMediaAssetsPropertyName, target); } } else { X509Certificate2 certToUse = null; Verify(this); dataContext.AddObject(JobBaseCollection.JobSet, this); List<AssetData> inputAssets = new List<AssetData>(); AssetNamingSchemeResolver<AssetData, OutputAsset> assetNamingSchemeResolver = new AssetNamingSchemeResolver<AssetData, OutputAsset>(inputAssets); foreach (ITask task in ((IJob)this).Tasks) { Verify(task); TaskData taskData = (TaskData)task; if (task.Options.HasFlag(TaskOptions.ProtectedConfiguration)) { ProtectTaskConfiguration(taskData, ref certToUse, dataContext); } taskData.TaskBody = CreateTaskBody(assetNamingSchemeResolver, task.InputAssets.ToArray(), task.OutputAssets.ToArray()); taskData.InputMediaAssets.AddRange(task.InputAssets.OfType<AssetData>().ToArray()); taskData.OutputMediaAssets.AddRange( task.OutputAssets .OfType<OutputAsset>() .Select( c => { AssetData assetData = new AssetData { Name = c.Name, Options = (int)c.Options, AlternateId = c.AlternateId }; assetData.InitCloudMediaContext(this._cloudMediaContext); return assetData; }) .ToArray()); dataContext.AddRelatedObject(this, TasksPropertyName, taskData); } foreach (IAsset asset in inputAssets) { dataContext.AttachTo(AssetCollection.AssetSet, asset); dataContext.AddLink(this, InputMediaAssetsPropertyName, asset); } } }
private void InnerSubmit(DataServiceContext dataContext) { if (!string.IsNullOrWhiteSpace(this.TemplateId)) { dataContext.AddObject(JobBaseCollection.JobSet, this); foreach (IAsset asset in this.InputMediaAssets) { AssetData target = asset as AssetData; if (target == null) { throw new ArgumentException(StringTable.ErrorInputTypeNotSupported); } dataContext.AttachTo(AssetCollection.AssetSet, asset); dataContext.AddLink(this, InputMediaAssetsPropertyName, target); } } else { X509Certificate2 certToUse = null; Verify(this); dataContext.AddObject(JobBaseCollection.JobSet, this); List <AssetData> inputAssets = new List <AssetData>(); AssetNamingSchemeResolver <AssetData, OutputAsset> assetNamingSchemeResolver = new AssetNamingSchemeResolver <AssetData, OutputAsset>(inputAssets); foreach (ITask task in ((IJob)this).Tasks) { Verify(task); TaskData taskData = (TaskData)task; if (task.Options.HasFlag(TaskOptions.ProtectedConfiguration)) { ProtectTaskConfiguration(taskData, ref certToUse, dataContext); } taskData.TaskBody = CreateTaskBody(assetNamingSchemeResolver, task.InputAssets.ToArray(), task.OutputAssets.ToArray()); taskData.InputMediaAssets.AddRange(task.InputAssets.OfType <AssetData>().ToArray()); taskData.OutputMediaAssets.AddRange( task.OutputAssets .OfType <OutputAsset>() .Select( c => { AssetData assetData = new AssetData { Name = c.Name, Options = (int)c.Options, AlternateId = c.AlternateId }; assetData.InitCloudMediaContext(this._cloudMediaContext); return(assetData); }) .ToArray()); dataContext.AddRelatedObject(this, TasksPropertyName, taskData); } foreach (IAsset asset in inputAssets) { dataContext.AttachTo(AssetCollection.AssetSet, asset); dataContext.AddLink(this, InputMediaAssetsPropertyName, asset); } } }