/// <summary> /// Loads a project from the repository returning back the details. /// </summary> /// <param name="site">The <see cref="Uri"/> of the project site.</param> /// <returns>The <see cref="Services.Contracts.Project"/> that exists at the specified <see cref="Uri"/>.</returns> public Services.Contracts.Project LoadProject(Uri site) { RoughCutEditorEntities context = null; Project project = null; try { context = new RoughCutEditorEntities(); context.CommandTimeout = DefaultCommandTimeout; var projectId = ExtractIdFromUri(site); project = LoadProject(projectId, context); if (project == null) { return(new Services.Contracts.Project()); } } finally { if (context != null) { context.Dispose(); } } return(SqlDataProviderTranslator.ConvertToProject(project, this.metadataLocator)); }
/// <summary> /// Loads the MediaBin <see cref="Container" /> with a <see cref="ItemCollection" /> that contains the items in the media bin. /// </summary> /// <param name="mediaBinUri">The <see cref="Uri"/> of the media bin to load.</param> /// <returns>A <see cref="Container"/> with the media elements for the project.</returns> public Services.Contracts.MediaBin LoadMediaBin(Uri mediaBinUri) { Container mediaBin = null; RoughCutEditorEntities context = null; try { context = new RoughCutEditorEntities(); context.CommandTimeout = 180; var id = ExtractIdFromUri(mediaBinUri); mediaBin = context.Container.Include("Items") .Include("Items.Resources") .Include("Items.Resources.VideoFormat") .Include("Items.Resources.AudioFormat") .Include("Items.Resources.ImageFormat") .Include("Containers") .Where(x => x.Id == id) .FirstOrDefault(); } finally { if (context != null) { context.Dispose(); } } return(SqlDataProviderTranslator.ConvertToMediaBin(mediaBin, this.metadataLocator)); }
/// <summary> /// Loads the MediaBin <see cref="Container" /> with a <see cref="ItemCollection" /> that contains the items in the media bin. /// </summary> /// <param name="mediaBinUri">The <see cref="Uri"/> of the media bin to load.</param> /// <returns>A <see cref="Container"/> with the media elements for the project.</returns> public Services.Contracts.MediaBin LoadMediaBin(Uri mediaBinUri) { RoughCutEditorEntities context = new RoughCutEditorEntities { CommandTimeout = 180 }; string uriString = mediaBinUri.ToString(); Container mediaBin = context.Container .Include("Items") .Include("Items.Resources") .Include("Items.Resources.VideoFormat") .Include("Items.Resources.AudioFormat") .Include("Items.Resources.ImageFormat") .Include("Containers") // .Include("Containers.Items") // .Include("Containers.Items.Resources") // .Include("Containers.Items.Resources.VideoFormat") // .Include("Containers.Items.Resources.AudioFormat") // .Include("Containers.Items.Resources.ImageFormat") .Where(x => x.Id == uriString) .FirstOrDefault(); return(SqlDataProviderTranslator.ConvertToMediaBin(mediaBin)); }
public void ShouldConvertSqlProjectToProject() { var sqlProject = SqlHelper.CreateSqlProject(); var project = SqlDataProviderTranslator.ConvertToProject(sqlProject); SqlHelper.AssertProject(sqlProject, project); }
public void ShouldConvertSqlContainerToContainer() { var sqlContainer = SqlHelper.CreateSqlContainer(); var container = SqlDataProviderTranslator.ConvertToContainer(sqlContainer); SqlHelper.AssertContainer(sqlContainer, container); }
public void ShouldConvertSqlContainerToAMediaBin() { var sqlContainer = SqlHelper.CreateSqlContainer(); var mediaBin = SqlDataProviderTranslator.ConvertToMediaBin(sqlContainer); SqlHelper.AssertContainer(sqlContainer, mediaBin); }
public void ShouldConvertTrackToSqlTrack() { var track = SqlHelper.CreateTrack(); var sqlTrack = new SqlTrack(); SqlDataProviderTranslator.ConvertToSqlTrack(track, sqlTrack); SqlHelper.AssertTrack(track, sqlTrack); }
public void ShouldConvertSqlContainerToContainerAndLimitTheItemsToTheValuePassed() { var maxNumberOfItems = 1; var sqlContainer = SqlHelper.CreateSqlContainer(); var container = SqlDataProviderTranslator.ConvertToContainer(sqlContainer, null, maxNumberOfItems); SqlHelper.AssertContainer(sqlContainer, container, maxNumberOfItems); }
public void ShouldConvertInkCommentToSqlComment() { var comment = SqlHelper.CreateInkComment(); var sqlComment = new SqlComment(); SqlDataProviderTranslator.ConvertToSqlComment(comment, sqlComment); SqlHelper.AssertComment(comment, sqlComment); }
public void ShouldConvertTitleToSqlTitle() { var title = SqlHelper.CreateTitle(); var sqlTitle = new SqlTitle(); SqlDataProviderTranslator.ConvertToSqlTitle(title, sqlTitle); SqlHelper.AssertTitle(title, sqlTitle); }
/// <summary> /// Loads a <see cref="TitleTemplate"/> from the repository. /// </summary> /// <returns>The <see cref="TitleTemplateCollection"/> of the titles template that were loaded.</returns> public TitleTemplateCollection LoadTitleTemplates() { RoughCutEditorEntities context = new RoughCutEditorEntities { CommandTimeout = DefaultCommandTimeout }; List <TitleTemplate> titleTemplates = context.TitleTemplate.ToList(); return(SqlDataProviderTranslator.ConvertToTitleTemplates(titleTemplates)); }
/// <summary> /// Get the projects collection of the given user. /// </summary> /// <param name="userName">The name of the user.</param> /// <returns>A <see cref="ProjectCollection"/> with all the projects of the user.</returns> public ProjectCollection GetProjectsByUser(string userName) { RoughCutEditorEntities context = new RoughCutEditorEntities(); List <Project> projects = context.Project .Include("MediaBin") .Where(x => x.Creator == userName) .ToList(); return(SqlDataProviderTranslator.ConvertToProjects(projects)); }
public void ShouldConvertListOfSqlProjectsToProjectCollection() { var sqlProjects = new List <SqlProject>(); sqlProjects.Add(SqlHelper.CreateSqlProject()); sqlProjects.Add(SqlHelper.CreateSqlProject()); var projects = SqlDataProviderTranslator.ConvertToProjects(sqlProjects); SqlHelper.AssertProject(sqlProjects[0], projects[0]); SqlHelper.AssertProject(sqlProjects[1], projects[1]); }
public void ShouldConvertListOfSqlTitleTemplatesToTitleCollection() { var sqlTitleTemplates = new List <SqlTitleTemplate>(); sqlTitleTemplates.Add(SqlHelper.CreateSqlTitleTemplate()); sqlTitleTemplates.Add(SqlHelper.CreateSqlTitleTemplate()); var titleTemplates = SqlDataProviderTranslator.ConvertToTitleTemplates(sqlTitleTemplates); SqlHelper.AssertTitleTemplate(titleTemplates[0], sqlTitleTemplates[0]); SqlHelper.AssertTitleTemplate(titleTemplates[1], sqlTitleTemplates[1]); }
/// <summary> /// Loads a project from the repository returning back the details. /// </summary> /// <param name="site">The <see cref="Uri"/> of the project site.</param> /// <returns>The <see cref="Services.Contracts.Project"/> that exists at the specified <see cref="Uri"/>.</returns> public Services.Contracts.Project LoadProject(Uri site) { RoughCutEditorEntities context = new RoughCutEditorEntities { CommandTimeout = DefaultCommandTimeout }; string projectUriString = site.ToString(); Project project = LoadProject(projectUriString, context); if (project == null) { return(new Services.Contracts.Project()); } return(SqlDataProviderTranslator.ConvertToProject(project)); }
public void ShouldConvertShotToSqlShot() { var shot = SqlHelper.CreateShot(); var sqlShot = new SqlShot(); var item = SqlHelper.CreateSqlItem(); item.Id = shot.Source.Id.ToString(); item.Resources.First().Id = shot.Source.Resources[0].Id.ToString(); var items = new List <SqlItem> { item }; SqlDataProviderTranslator.ConvertToSqlShot(shot, sqlShot, items); SqlHelper.AssertShot(shot, sqlShot); }
public void ShouldConvertMediaBinToSqlContainer() { var mediaBin = SqlHelper.CreateMediaBin(); var sqlMediaBin = new SqlContainer(); var item = SqlHelper.CreateSqlItem(); item.Id = mediaBin.Items.First().Id.ToString(); item.Resources.First().Id = mediaBin.Items.First().Resources.First().Id.ToString(); var items = new List <SqlItem> { item }; var result = SqlDataProviderTranslator.ConvertToSqlMediaBin(mediaBin, sqlMediaBin, items); SqlHelper.AssertContainer(mediaBin, result); }
/// <summary> /// Get the projects collection of the given user. /// </summary> /// <param name="userName">The name of the user.</param> /// <returns>A <see cref="ProjectCollection"/> with all the projects of the user.</returns> public ProjectCollection GetProjectsByUser(string userName) { RoughCutEditorEntities context = default(RoughCutEditorEntities); List <Project> projects = default(List <Project>); try { context = new RoughCutEditorEntities(); projects = context.Project.Include("MediaBin").Where(x => x.Creator == userName).ToList(); } finally { if (context != null) { context.Dispose(); } } return(SqlDataProviderTranslator.ConvertToProjects(projects, this.metadataLocator)); }
/// <summary> /// Loads a <see cref="TitleTemplate"/> from the repository. /// </summary> /// <returns>The <see cref="TitleTemplateCollection"/> of the titles template that were loaded.</returns> public TitleTemplateCollection LoadTitleTemplates() { RoughCutEditorEntities context = null; List <TitleTemplate> titleTemplates = null; try { context = new RoughCutEditorEntities(); context.CommandTimeout = DefaultCommandTimeout; titleTemplates = context.TitleTemplate.ToList(); } finally { if (context != null) { context.Dispose(); } } return(SqlDataProviderTranslator.ConvertToTitleTemplates(titleTemplates)); }
private RCE.Services.Contracts.Container LoadLibrary(Uri libraryId, string filter, int maxNumberOfItems) { RCE.Services.Contracts.Container library = null; RoughCutEditorEntities context = null; try { context = new RoughCutEditorEntities(); context.CommandTimeout = DefaultCommandTimeout; var id = ExtractIdFromUri(libraryId); ObjectQuery <Container> sqlContainerQuery = context.Container.Include("Containers"); if (!string.IsNullOrEmpty(filter)) { sqlContainerQuery = sqlContainerQuery.Include("Containers.Items"); } Container sqlContainer = sqlContainerQuery.FirstOrDefault(x => x.Id == id); ObjectQuery <Item> query = context.Item; if (maxNumberOfItems > 0) { query.Top(maxNumberOfItems.ToString(CultureInfo.InvariantCulture)); } IQueryable <Item> items = query.Where(x => x.Container.FirstOrDefault().Id == sqlContainer.Id); if (sqlContainer != null) { foreach (Item item in items) { if (!item.Resources.IsLoaded) { item.Resources.Load(); foreach (Resource resource in item.Resources) { if (!resource.VideoFormatReference.IsLoaded) { resource.VideoFormatReference.Load(); } if (!resource.AudioFormatReference.IsLoaded) { resource.AudioFormatReference.Load(); } if (!resource.ImageFormatReference.IsLoaded) { resource.ImageFormatReference.Load(); } } } } sqlContainer.Items.Attach(items); library = SqlDataProviderTranslator.ConvertToContainer( sqlContainer, filter, maxNumberOfItems, this.metadataLocator); } } finally { if (context != null) { context.Dispose(); } } return(library); }
/// <summary> /// Saves a project into the repository. /// </summary> /// <param name="project">The project to be saved.</param> /// <returns>true, indicates that the project was saved. false, that the save failed.</returns> public bool SaveProject(Services.Contracts.Project project) { RoughCutEditorEntities context = new RoughCutEditorEntities { CommandTimeout = 1000 }; try { IList <Item> items = new List <Item>(); RetrieveItems(items, project.MediaBin.Items, context); RetrieveItems(items, project.MediaBin.Containers, context); string uriString = project.Id.ToString(); Project sqlProject = LoadFullProject(uriString, context); if (sqlProject == null) { sqlProject = new Project { Id = uriString }; context.AddToProject(sqlProject); } SqlDataProviderTranslator.ConvertToSqlProject(project, sqlProject); uriString = project.MediaBin.Id.ToString(); Container sqlMediaBin = context.Container.Where(m => m.Id == uriString).FirstOrDefault(); if (sqlMediaBin == null) { sqlMediaBin = new Container { Id = uriString, Title = project.MediaBin.Title }; } sqlMediaBin.Items.Clear(); sqlProject.MediaBin = SqlDataProviderTranslator.ConvertToSqlMediaBin(project.MediaBin, sqlMediaBin, items); foreach (RCE.Services.Contracts.Container container in project.MediaBin.Containers) { uriString = container.Id.ToString(); Container sqlContainer = context.Container.Where(m => m.Id == uriString).FirstOrDefault(); if (sqlContainer == null) { sqlContainer = new Container { Id = uriString, Title = container.Title }; sqlMediaBin.Containers.Add(sqlContainer); } sqlContainer.Items.Clear(); SqlDataProviderTranslator.ConvertToSqlMediaBin(container, sqlContainer, items); } sqlMediaBin.Containers.Where(x => x.EntityState == EntityState.Unchanged) .ToList() .ForEach(x => { x.Items.Where(i => i.EntityState == EntityState.Unchanged) .ToList() .ForEach(i => { x.Items.Remove(i); }); sqlMediaBin.Containers.Remove(x); context.DeleteObject(x); }); foreach (Services.Contracts.Comment comment in project.Comments) { uriString = comment.Id.ToString(); Comment sqlComment = sqlProject.Comments.Where(m => m.Id == uriString).FirstOrDefault(); if (sqlComment == null) { sqlComment = new Comment { Id = uriString }; sqlProject.Comments.Add(sqlComment); } SqlDataProviderTranslator.ConvertToSqlComment(comment, sqlComment); } sqlProject.Comments.Where(x => x.EntityState == EntityState.Unchanged) .ToList() .ForEach(x => { sqlProject.Comments.Remove(x); context.DeleteObject(x); }); foreach (Services.Contracts.Track track in project.Timeline) { uriString = track.Id.ToString(); Track sqlTrack = sqlProject.Tracks.Where(m => m.Id == uriString).FirstOrDefault(); if (sqlTrack == null) { sqlTrack = new Track { Id = uriString }; sqlProject.Tracks.Add(sqlTrack); } SqlDataProviderTranslator.ConvertToSqlTrack(track, sqlTrack); foreach (Services.Contracts.Shot shot in track.Shots) { uriString = shot.Id.ToString(); Shot sqlShot = sqlTrack.Shots.Where(m => m.Id == uriString).FirstOrDefault(); if (sqlShot == null) { sqlShot = new Shot { Id = uriString }; sqlTrack.Shots.Add(sqlShot); } SqlDataProviderTranslator.ConvertToSqlShot(shot, sqlShot, items); foreach (Services.Contracts.Comment comment in shot.Comments) { uriString = comment.Id.ToString(); Comment sqlComment = sqlProject.Comments.Where(m => m.Id == uriString).FirstOrDefault(); if (sqlComment == null) { sqlComment = new Comment { Id = uriString }; sqlShot.Comments.Add(sqlComment); } else if (sqlComment.EntityState == EntityState.Added) { sqlShot.Comments.Add(sqlComment); } SqlDataProviderTranslator.ConvertToSqlComment(comment, sqlComment); } sqlShot.Comments.Where(x => x.EntityState == EntityState.Unchanged) .ToList() .ForEach(x => { sqlProject.Comments.Remove(x); context.DeleteObject(x); }); } sqlTrack.Shots.Where(x => x.EntityState == EntityState.Unchanged) .ToList() .ForEach(x => { sqlTrack.Shots.Remove(x); context.DeleteObject(x); }); } sqlProject.Tracks.Where(x => x.EntityState == EntityState.Unchanged) .ToList() .ForEach(x => { sqlProject.Tracks.Remove(x); context.DeleteObject(x); }); foreach (Services.Contracts.Title title in project.Titles) { uriString = title.Id.ToString(); Title sqlTitle = sqlProject.Titles.Where(m => m.Id == uriString).FirstOrDefault(); if (sqlTitle == null) { sqlTitle = new Title { Id = uriString }; string tempId = title.TitleTemplate.Id.ToString(); sqlTitle.TitleTemplate = context.TitleTemplate.Where(m => m.Id == tempId).FirstOrDefault(); sqlProject.Titles.Add(sqlTitle); } SqlDataProviderTranslator.ConvertToSqlTitle(title, sqlTitle); } sqlProject.Titles.Where(x => x.EntityState == EntityState.Unchanged) .ToList() .ForEach(x => { sqlProject.Titles.Remove(x); context.DeleteObject(x); }); context.SaveChanges(); return(true); } catch (Exception ex) { this.Log(ex); return(false); } }
/// <summary> /// Saves a project into the repository. /// </summary> /// <param name="project">The project to be saved.</param> /// <returns>true, indicates that the project was saved. false, that the save failed.</returns> public bool SaveProject(Services.Contracts.Project project) { // TODO // This method must also start the Sub-Clipping Job. Use the same code that is in the // RCE.Services.OutputService.GenerateCompositeStreamManifest method. You can ignore all // the additional method parameters (pbpDataStreamName, adsDataStreamName, compressManifest, // gapUriString, gapCmsId, gapAzureId) since they are not being used. RoughCutEditorEntities context = null; try { context = new RoughCutEditorEntities(); context.CommandTimeout = 1000; IList <Item> items = new List <Item>(); RetrieveItems(items, project.MediaBin.Items, context); RetrieveItems(items, project.MediaBin.Containers, context); var id = ExtractIdFromUri(project.Id); Project sqlProject = LoadFullProject(id, context); if (sqlProject == null) { sqlProject = new Project { Id = id }; context.AddToProject(sqlProject); } SqlDataProviderTranslator.ConvertToSqlProject(project, sqlProject); id = ExtractIdFromUri(project.MediaBin.Id); Container sqlMediaBin = context.Container.Where(m => m.Id == id).FirstOrDefault(); if (sqlMediaBin == null) { sqlMediaBin = new Container { Id = id, Title = project.MediaBin.Title }; } sqlMediaBin.Items.Clear(); sqlProject.MediaBin = SqlDataProviderTranslator.ConvertToSqlMediaBin( project.MediaBin, sqlMediaBin, items); foreach (RCE.Services.Contracts.Container container in project.MediaBin.Containers) { id = ExtractIdFromUri(container.Id); Container sqlContainer = context.Container.Where(m => m.Id == id).FirstOrDefault(); if (sqlContainer == null) { sqlContainer = new Container { Id = id, Title = container.Title }; sqlMediaBin.Containers.Add(sqlContainer); } sqlContainer.Items.Clear(); SqlDataProviderTranslator.ConvertToSqlMediaBin(container, sqlContainer, items); } sqlMediaBin.Containers.Where(x => x.EntityState == EntityState.Unchanged).ToList().ForEach( x => { x.Items.Where(i => i.EntityState == EntityState.Unchanged).ToList().ForEach( i => { x.Items.Remove(i); }); sqlMediaBin.Containers.Remove(x); context.DeleteObject(x); }); foreach (Services.Contracts.Comment comment in project.Comments) { id = ExtractIdFromUri(comment.Id); Comment sqlComment = sqlProject.Comments.Where(m => m.Id == id).FirstOrDefault(); if (sqlComment == null) { sqlComment = new Comment { Id = id }; sqlProject.Comments.Add(sqlComment); } SqlDataProviderTranslator.ConvertToSqlComment(comment, sqlComment); } sqlProject.Comments.Where(x => x.EntityState == EntityState.Unchanged).ToList().ForEach( x => { sqlProject.Comments.Remove(x); context.DeleteObject(x); }); foreach (Services.Contracts.Track track in project.Sequences[0].Tracks) { id = ExtractIdFromUri(track.Id); Track sqlTrack = sqlProject.Tracks.Where(m => m.Id == id).FirstOrDefault(); if (sqlTrack == null) { sqlTrack = new Track { Id = id }; sqlProject.Tracks.Add(sqlTrack); } SqlDataProviderTranslator.ConvertToSqlTrack(track, sqlTrack); foreach (Services.Contracts.Shot shot in track.Shots) { id = ExtractIdFromUri(shot.Id); Shot sqlShot = sqlTrack.Shots.Where(m => m.Id == id).FirstOrDefault(); if (sqlShot == null) { sqlShot = new Shot { Id = id }; sqlTrack.Shots.Add(sqlShot); } SqlDataProviderTranslator.ConvertToSqlShot(shot, sqlShot, items); foreach (Services.Contracts.Comment comment in shot.Comments) { id = ExtractIdFromUri(comment.Id); Comment sqlComment = sqlProject.Comments.Where(m => m.Id == id).FirstOrDefault(); if (sqlComment == null) { sqlComment = new Comment { Id = id }; sqlShot.Comments.Add(sqlComment); } else if (sqlComment.EntityState == EntityState.Added) { sqlShot.Comments.Add(sqlComment); } SqlDataProviderTranslator.ConvertToSqlComment(comment, sqlComment); } sqlShot.Comments.Where(x => x.EntityState == EntityState.Unchanged).ToList().ForEach( x => { sqlProject.Comments.Remove(x); context.DeleteObject(x); }); } sqlTrack.Shots.Where(x => x.EntityState == EntityState.Unchanged).ToList().ForEach( x => { sqlTrack.Shots.Remove(x); context.DeleteObject(x); }); } sqlProject.Tracks.Where(x => x.EntityState == EntityState.Unchanged).ToList().ForEach( x => { sqlProject.Tracks.Remove(x); context.DeleteObject(x); }); foreach (Services.Contracts.Title title in project.Titles) { id = ExtractIdFromUri(title.Id); Title sqlTitle = sqlProject.Titles.Where(m => m.Id == id).FirstOrDefault(); if (sqlTitle == null) { sqlTitle = new Title { Id = id }; var tempId = ExtractIdFromUri(title.TitleTemplate.Id); sqlTitle.TitleTemplate = context.TitleTemplate.Where(m => m.Id == tempId).FirstOrDefault(); sqlProject.Titles.Add(sqlTitle); } SqlDataProviderTranslator.ConvertToSqlTitle(title, sqlTitle); } sqlProject.Titles.Where(x => x.EntityState == EntityState.Unchanged).ToList().ForEach( x => { sqlProject.Titles.Remove(x); context.DeleteObject(x); }); context.SaveChanges(); return(true); } catch (Exception ex) { this.Log(ex); return(false); } finally { if (context != null) { context.Dispose(); } } }
/// <summary> /// Returns back all of the items that are contained in the library filtering them using the filter provided. /// </summary> /// <param name="libraryId">The <see cref="Uri"/> of the container to load from the library.</param> /// <param name="filter">The filter used to get the items.</param> /// <param name="maxNumberOfItems">Maximum no. of records in the result.</param> /// <returns>A <see cref="Container"/> with the items.</returns> private static RCE.Services.Contracts.Container LoadLibrary(Uri libraryId, string filter, int maxNumberOfItems) { RoughCutEditorEntities context = new RoughCutEditorEntities { CommandTimeout = DefaultCommandTimeout }; string uriString = libraryId.ToString(); ObjectQuery <Container> sqlContainerQuery = context.Container .Include("Containers"); if (!string.IsNullOrEmpty(filter)) { sqlContainerQuery = sqlContainerQuery.Include("Containers.Items"); } Container sqlContainer = sqlContainerQuery.FirstOrDefault(x => x.Id == uriString); ObjectQuery <Item> query = context.Item; // .Include("Resources") // .Include("Resources.VideoFormat") // .Include("Resources.AudioFormat") // .Include("Resources.ImageFormat") if (maxNumberOfItems > 0) { query.Top(maxNumberOfItems.ToString(CultureInfo.InvariantCulture)); } IQueryable <Item> items = query.Where(x => x.Container.FirstOrDefault().Id == sqlContainer.Id) .SelectMany(x => x.Resources.Where(r => r.ResourceType != "LiveSmoothStream")) .Select(x => x.Item); RCE.Services.Contracts.Container library = null; if (sqlContainer != null) { foreach (Item item in items) { if (!item.Resources.IsLoaded) { item.Resources.Load(); foreach (Resource resource in item.Resources) { if (!resource.VideoFormatReference.IsLoaded) { resource.VideoFormatReference.Load(); } if (!resource.AudioFormatReference.IsLoaded) { resource.AudioFormatReference.Load(); } if (!resource.ImageFormatReference.IsLoaded) { resource.ImageFormatReference.Load(); } } } } sqlContainer.Items.Attach(items); library = SqlDataProviderTranslator.ConvertToContainer(sqlContainer, filter, maxNumberOfItems); } return(library); }