public TVTNews FindNewsMatchWithV2(TVTNews other)
        {
            var allNews = LeadingDatabase.GetAllNews();

            var results1 = allNews.Where(x => x.TitleDE == other.TitleDE);

            if (results1.Count() == 1)
            {
                return(results1.First());
            }
            else
            {
                var results2 = allNews.Where(new Func <TVTNews, bool>(x =>
                {
                    if (x.Genre == other.Genre && x.Quality == other.Quality && x.NewsType == other.NewsType && x.Price == other.Price)
                    {
                        if (x.NewsType == TVTNewsType.FollowingNews && !string.IsNullOrEmpty(x.NewsThreadId) && !string.IsNullOrEmpty(other.NewsThreadId))
                        {
                            if (x.NewsThreadInitial != null && other.NewsThreadInitial != null)
                            {
                                if (x.NewsThreadInitial.TitleDE == other.NewsThreadInitial.TitleDE)
                                {
                                    return(true);
                                }
                            }
                            else
                            {
                                return(true);
                            }
                        }
                        else
                        {
                            return(true);
                        }
                    }

                    return(false);
                }));

                if (results2.Count() == 0)
                {
                    System.Diagnostics.Trace.WriteLine("Not found: " + other.TitleDE);
                }
                else if (results2.Count() == 1)
                {
                    return(results2.First());
                }
                else
                {
                    System.Diagnostics.Trace.WriteLine("Found more then one: " + other.TitleDE);
                }
            }

            return(null);
        }
        public void MergeNewsData(TVTNews target, TVTNews leading, bool mergeNoEffects = false)
        {
            var type = typeof(TVTNews);

            foreach (var property in type.GetProperties())
            {
                if (mergeNoEffects && property.Name == "Effects")
                {
                    //Nichts machen
                }
                else
                {
                    if (property.Name != "Id")
                    {
                        if (property.CanWrite && property.CanRead)
                        {
                            property.SetValue(target, property.GetValue(leading, null), null);
                        }
                    }
                }
            }
        }
 public void AddNews(TVTNews news)
 {
     NewsData.Add(news);
 }
        public static void Convert(List <NewsOldV2> newsOldV2, ITVTDatabase database, TVTDataRoot dataRoot)
        {
            foreach (var newsSrc in newsOldV2)
            {
                var news = new TVTNews();
                news.DataRoot = dataRoot;

                ConvertCommonMinimal(newsSrc, news, database);

                if (newsSrc.parentID == 0)
                {
                    news.NewsType     = TVTNewsType.InitialNews;
                    news.NewsThreadId = newsSrc.id.ToString();
                    news.Tag          = -1;
                }
                else
                {
                    news.NewsType     = TVTNewsType.FollowingNews;
                    news.NewsThreadId = newsSrc.parentID.ToString();
                    news.Tag          = newsSrc.episode;
                }

                //PossibleFollower - erst später ermitteln;
                news.Genre = (TVTNewsGenre)newsSrc.genre;

                news.AvailableAfterDays       = -1;
                news.YearRangeFrom            = -1;
                news.YearRangeTo              = -1;
                news.MinHoursAfterPredecessor = -1;
                news.TimeRangeFrom            = -1;
                news.TimeRangeTo              = -1;

                news.Price   = ConvertOldToNewValue(newsSrc.price);
                news.Quality = ConvertOldToNewValue(newsSrc.topicality);

                news.Resource1Type = null;
                news.Resource2Type = null;
                news.Resource3Type = null;
                news.Resource4Type = null;

                database.AddNews(news);
            }

            var allNews = database.GetAllNews();

            List <string> threadsDone = new List <string>();

            //Episoden-ID fixen
            foreach (var news in allNews)
            {
                if (!threadsDone.Contains(news.NewsThreadId))
                {
                    var newsThread = allNews.Where(x => x.NewsThreadId == news.NewsThreadId);

                    var start = newsThread.FirstOrDefault(x => (int)x.Tag == -1);
                    start.Tag = 0;

                    var rest = newsThread.ToList();
                    rest.Remove(start);

                    var episode = 1;
                    foreach (var restNews in rest.OrderBy(x => x.Tag).ToList())
                    {
                        restNews.Tag = episode;
                        episode++;
                    }

                    threadsDone.Add(news.NewsThreadId);
                }
            }

            foreach (var news in allNews)
            {
                var episode = (int)news.Tag;

                TVTNews follower = allNews.FirstOrDefault(x => x.NewsThreadId == news.NewsThreadId && (int)x.Tag == episode + 1);
                if (follower != null)
                {
                    follower.NewsType = TVTNewsType.FollowingNews;
                    news.Effects.Add(new TVTNewsEffect(TVTNewsEffectType.TriggerNews, follower.Id.ToString()));
                }
                else
                {
                    if (news.NewsThreadId == news.OldId)
                    {
                        news.NewsType = TVTNewsType.InitialNews;
                    }
                    else
                    {
                        news.NewsType = TVTNewsType.FollowingNews;
                    }
                }
            }

            foreach (var news in allNews)
            {
                //if ( news.NewsType == TVTNewsType.SingleNews )
                //    news.NewsThreadId = null;
                //else
                //{
                TVTNews thread_owner = allNews.FirstOrDefault(x => x.OldId == news.NewsThreadId);
                news.NewsThreadId = thread_owner.Id.ToString();
                //}
            }
        }
Exemple #5
0
        public void B_ReadXMLV2AndMerge()
        {
            System.Diagnostics.Trace.WriteLine(Directory.GetCurrentDirectory());
            Assert.IsTrue(File.Exists("database.xml"));

            var databaseV2 = new TVTDatabase();

            databaseV2.Initialize();

            var persister = new XmlPersisterV2();

            persister.LoadXML("database.xml", databaseV2, TVTDataRoot.V2InUse);

            var sqlDB = new TVTDatabase();

            sqlDB.Initialize();
            sqlDB.Clear();
            using (var connection = TVTSQLSession.GetSessionNewDB())
            {
                string myConnectionString = "SERVER=localhost;" +
                                            "DATABASE=tvtower_new;" +
                                            "UID=TVTowerUser;" +
                                            "PASSWORD=123;";

                var mvSQLDatabase = new TVTSQLDatabase(myConnectionString);
                mvSQLDatabase.FillTVTDatabase(sqlDB);
            }

            var merging = new DatabaseMerging(sqlDB);

            {
                foreach (var currMovie in databaseV2.GetAllProgrammes(true, true))
                {
                    var found = merging.FindProgrammeMatch(currMovie);
                    if (found != null)
                    {
                        merging.MergeProgrammeData(found, currMovie, true);
                        found.DataRoot  = TVTDataRoot.V2InUse;
                        found.IsChanged = true;
                        foreach (var member in found.Staff)
                        {
                            if (member.Person != null)
                            {
                                member.Person.DataRoot  = TVTDataRoot.V2InUse;
                                member.Person.IsChanged = true;
                            }
                        }
                    }
                    else
                    {
                        var newProgramme = new TVTProgramme();
                        newProgramme.GenerateGuid();
                        merging.MergeProgrammeData(newProgramme, currMovie);
                        newProgramme.DataRoot  = TVTDataRoot.V2InUse;
                        newProgramme.IsNew     = true;
                        newProgramme.IsChanged = true;
                        foreach (var member in newProgramme.Staff)
                        {
                            member.Person.DataRoot  = TVTDataRoot.V2InUse;
                            member.Person.IsChanged = true;
                        }
                        sqlDB.AddProgramme(newProgramme);
                    }
                }
            }

            {
                foreach (var currNews in databaseV2.GetAllNews())
                {
                    var found = merging.FindNewsMatchWithV2(currNews);
                    if (found != null)
                    {
                        merging.MergeNewsData(found, currNews, true);
                        found.DataRoot  = TVTDataRoot.V2InUse;
                        found.IsChanged = true;
                    }
                    else
                    {
                        var newNews = new TVTNews();
                        newNews.GenerateGuid();
                        merging.CopyPropertyValues <TVTNews>(newNews, currNews);
                        newNews.DataRoot  = TVTDataRoot.V2InUse;
                        newNews.IsNew     = true;
                        newNews.IsChanged = true;
                        sqlDB.AddNews(newNews);
                    }
                }
            }

            {
                foreach (var currAd in databaseV2.GetAllAdvertisings())
                {
                    var found = merging.FindAdMatchWithV2(currAd);
                    if (found != null)
                    {
                        merging.CopyPropertyValues <TVTAdvertising>(found, currAd);
                        found.DataRoot  = TVTDataRoot.V2InUse;
                        found.IsChanged = true;
                    }
                    else
                    {
                        var newAd = new TVTAdvertising();
                        newAd.GenerateGuid();
                        merging.CopyPropertyValues <TVTAdvertising>(newAd, currAd);
                        newAd.DataRoot  = TVTDataRoot.V2InUse;
                        newAd.IsNew     = true;
                        newAd.IsChanged = true;
                        sqlDB.AddAdvertising(newAd);
                    }
                }
            }

            using (var connection = TVTSQLSession.GetSessionNewDB())
            {
                string myConnectionString = "SERVER=localhost;" +
                                            "DATABASE=tvtower_new;" +
                                            "UID=TVTowerUser;" +
                                            "PASSWORD=123;";

                var mvSQLDatabase = new TVTSQLDatabase(myConnectionString);
                mvSQLDatabase.WriteChangesToDatabase(sqlDB);
            }
        }