Ejemplo n.º 1
0
        /// <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));
        }
Ejemplo n.º 2
0
        /// <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));
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 11
0
        /// <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));
        }
Ejemplo n.º 12
0
        /// <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]);
        }
Ejemplo n.º 15
0
        /// <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);
        }
Ejemplo n.º 18
0
        /// <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));
        }
Ejemplo n.º 19
0
        /// <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));
        }
Ejemplo n.º 20
0
        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);
        }
Ejemplo n.º 21
0
        /// <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);
            }
        }
Ejemplo n.º 22
0
        /// <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();
                }
            }
        }
Ejemplo n.º 23
0
        /// <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);
        }