private Task <IJobTemplate> CreateJobTemplate(string templateName, JobTemplateType templateType, params ITaskTemplate[] taskTemplates) { X509Certificate2 certToUse = null; IMediaDataServiceContext dataContext = this.GetMediaContext().MediaServicesClassFactory.CreateDataServiceContext(); JobTemplateData jobTemplateData = new JobTemplateData { Name = templateName, TemplateType = (int)templateType }; jobTemplateData.SetMediaContext(this.GetMediaContext()); dataContext.AddObject(JobTemplateBaseCollection.JobTemplateSet, jobTemplateData); foreach (ITaskTemplate taskTemplate in taskTemplates) { Verify(taskTemplate); dataContext.AddRelatedObject(jobTemplateData, TaskTemplatesPropertyName, taskTemplate); if (taskTemplate.Options.HasFlag(TaskOptions.ProtectedConfiguration) && string.IsNullOrWhiteSpace(this.Id)) { ProtectTaskConfiguration((TaskTemplateData)taskTemplate, ref certToUse, dataContext); } } AssetNamingSchemeResolver <AssetData, OutputAsset> assetIdMap = new AssetNamingSchemeResolver <AssetData, OutputAsset>(); jobTemplateData.JobTemplateBody = CreateJobTemplateBody(assetIdMap, taskTemplates); jobTemplateData.NumberofInputAssets = string.IsNullOrWhiteSpace(this.Id) ? assetIdMap.Inputs.Count : ((IJob)this).InputMediaAssets.Count; MediaRetryPolicy retryPolicy = this.GetMediaContext().MediaServicesClassFactory.GetSaveChangesRetryPolicy(dataContext as IRetryPolicyAdapter); return(retryPolicy.ExecuteAsync <IMediaDataServiceResponse>(() => dataContext.SaveChangesAsync(SaveChangesOptions.Batch, jobTemplateData)) .ContinueWith <IJobTemplate>( t => { t.ThrowIfFaulted(); JobTemplateData data = (JobTemplateData)t.Result.AsyncState; IJobTemplate jobTemplateToReturn = this.GetMediaContext().JobTemplates.Where(c => c.Id == data.Id).First(); return jobTemplateToReturn; })); }
/// <summary> /// Creates an in-memory copy of this <see cref="IJobTemplate"/>. /// </summary> /// <returns>A copy of this <see cref="IJobTemplate"/>.</returns> public IJobTemplate Copy() { JobTemplateData jobTemplateCopy = new JobTemplateData { Name = this.Name, TemplateType = this.TemplateType, NumberofInputAssets = this.NumberofInputAssets, JobTemplateBodyCopied = this.JobTemplateBody }; jobTemplateCopy.SetMediaContext(this.GetMediaContext()); foreach (TaskTemplateData taskTemplate in ((IJobTemplate)this).TaskTemplates.OfType <TaskTemplateData>()) { jobTemplateCopy.TaskTemplates.Add(taskTemplate.Copy()); } return(jobTemplateCopy); }