Inheritance: IJobTemplate
        /// <summary>
        /// Asynchronously saves this <see cref="IJobTemplate"/> when created from a copy of an existing <see cref="IJobTemplate"/>.
        /// </summary>
        /// <returns>A function delegate that returns the future result to be available through the Task.</returns>
        public Task SaveAsync()
        {
            if (!string.IsNullOrWhiteSpace(this.Id))
            {
                // The job template was already saved, and there is no current support to update it.
                throw new InvalidOperationException(StringTable.InvalidOperationSaveForSavedJobTemplate);
            }

            IMediaDataServiceContext dataContext = this.GetMediaContext().MediaServicesClassFactory.CreateDataServiceContext();

            this.InnerSave(dataContext);

            MediaRetryPolicy retryPolicy = this.GetMediaContext().MediaServicesClassFactory.GetSaveChangesRetryPolicy(dataContext as IRetryPolicyAdapter);

            return(retryPolicy.ExecuteAsync <IMediaDataServiceResponse>(() => dataContext.SaveChangesAsync(SaveChangesOptions.Batch, this))
                   .ContinueWith(
                       t =>
            {
                t.ThrowIfFaulted();

                JobTemplateData data = (JobTemplateData)t.Result.AsyncState;

                LoadProperty(dataContext, data, TaskTemplatesPropertyName);
            }));
        }
        /// <summary>
        /// Asynchronously saves this <see cref="IJobTemplate"/> when created from a copy of an existing <see cref="IJobTemplate"/>.
        /// </summary>
        /// <returns>A function delegate that returns the future result to be available through the Task.</returns>
        public Task SaveAsync()
        {
            if (!string.IsNullOrWhiteSpace(this.Id))
            {
                // The job template was already saved, and there is no current support to update it.
                throw new InvalidOperationException(StringTable.InvalidOperationSaveForSavedJobTemplate);
            }

            DataServiceContext dataContext = this._cloudMediaContext.DataContextFactory.CreateDataServiceContext();

            this.InnerSave(dataContext);

            return(dataContext
                   .SaveChangesAsync(SaveChangesOptions.Batch, this)
                   .ContinueWith(
                       t =>
            {
                t.ThrowIfFaulted();

                JobTemplateData data = (JobTemplateData)t.AsyncState;

                dataContext.CreateQuery <JobTemplateData>(JobTemplateBaseCollection.JobTemplateSet).Where(jt => jt.Id == data.Id).First();
                dataContext.LoadProperty(data, TaskTemplatesPropertyName);
            }));
        }
Example #3
0
        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);
        }
        private Task<IJobTemplate> CreateJobTemplate(string templateName, JobTemplateType templateType, params ITaskTemplate[] taskTemplates)
        {
            X509Certificate2 certToUse = null;
            DataServiceContext dataContext = this._cloudMediaContext.DataContextFactory.CreateDataServiceContext();
            JobTemplateData jobTemplateData = new JobTemplateData { Name = templateName, TemplateType = (int)templateType };

            jobTemplateData.InitCloudMediaContext(this._cloudMediaContext);

            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;

            return dataContext
                .SaveChangesAsync(SaveChangesOptions.Batch, jobTemplateData)
                .ContinueWith<IJobTemplate>(
                    t =>
                    {
                        t.ThrowIfFaulted();

                        JobTemplateData data = (JobTemplateData)t.AsyncState;
                        IJobTemplate jobTemplateToReturn = this._cloudMediaContext.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.InitCloudMediaContext(this._cloudMediaContext);

            foreach (TaskTemplateData taskTemplate in ((IJobTemplate)this).TaskTemplates.OfType<TaskTemplateData>())
            {
                jobTemplateCopy.TaskTemplates.Add(taskTemplate.Copy());
            }

            return jobTemplateCopy;
        }