Ejemplo n.º 1
0
 private static void IspisPodatakaSlobodnogVremena(TvProgram program, int i)
 {
     Console.WriteLine("\t - Preostalo slobodno vrijeme iznosi ukupno " +
                       DohvatiBrojMinutaSlobodnogVremena
                       (
                           DohvatiBrojMinutaEmitiranjaEmisija(
                               program.GetTjedan()[i].GetChildList().OrderBy
                                   (o => o.GetVrijemePrikazivanja()).ToList <IComponentRaspored>()),
                           DohvatiBrojMinutaEmitSignalaTvKuce(
                               program.GetTjedan()[i].GetChildList().OrderBy
                                   (o => o.GetVrijemePrikazivanja()).ToList <IComponentRaspored>())
                       )
                       + " minuta, time prekrivajuci oko " +
                       IzracunajUdioMinutaUDanu
                       (
                           DohvatiBrojMinutaSlobodnogVremena
                           (
                               DohvatiBrojMinutaEmitiranjaEmisija(
                                   program.GetTjedan()[i].GetChildList().OrderBy
                                       (o => o.GetVrijemePrikazivanja()).ToList <IComponentRaspored>()),
                               DohvatiBrojMinutaEmitSignalaTvKuce(
                                   program.GetTjedan()[i].GetChildList().OrderBy
                                       (o => o.GetVrijemePrikazivanja()).ToList <IComponentRaspored>())
                           )
                       )
                       + "% dnevnog vremena.");
 }
        private static bool PrelaziPonocaXkrajPrograma(Emisija emisija, TvProgram program)
        {
            DateTime datum;

            if (program.GetKrajPrikazivanja() == DateTime.MinValue)
            {
                datum = new DateTime(
                    emisija.GetVrijemePrikazivanja().Year, emisija.GetVrijemePrikazivanja().Month,
                    emisija.GetVrijemePrikazivanja().AddDays(1).Day, 0, 0, 0);
            }
            else
            {
                datum = new DateTime(
                    emisija.GetVrijemePrikazivanja().Year, emisija.GetVrijemePrikazivanja().Month,
                    emisija.GetVrijemePrikazivanja().AddDays(0).Day,
                    program.GetKrajPrikazivanja().Hour, program.GetKrajPrikazivanja().Minute, 0);
            }
            TimeSpan timespan = datum - emisija.GetVrijemePrikazivanja()
                                .AddMinutes(emisija.GetTrajanje());

            if (timespan.TotalMinutes < 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
        private static DateTime DohvatiVrijemeEmisijuMoguceUbacitiNakonZadnjeEmisije(
            IComponentRaspored dan, int trajanje, TvProgram program)
        {
            DateTime vratiDatum = DateTime.MinValue;
            List <IComponentRaspored> sortiranDan = dan.GetChildList().OrderBy
                                                        (o => o.GetVrijemePrikazivanja()).ToList <IComponentRaspored>();

            DateTime krajZadnjeEmisije = new DateTime();

            krajZadnjeEmisije = sortiranDan[sortiranDan.Count - 1].GetVrijemePrikazivanja()
                                .AddMinutes(sortiranDan[sortiranDan.Count - 1].GetTrajanje());

            DateTime krajPrograma = new DateTime();

            krajPrograma = program.GetKrajPrikazivanja();

            if (krajPrograma == DateTime.MinValue)
            {
                if (!PrelaziPonoca(krajPrograma, trajanje))
                {
                    vratiDatum = krajZadnjeEmisije;
                    return(vratiDatum);
                }
            }
            else
            {
                if (krajZadnjeEmisije.AddMinutes(trajanje) <= krajPrograma)
                {
                    vratiDatum = krajZadnjeEmisije;
                    return(vratiDatum);
                }
            }
            return(vratiDatum);
        }
        private static bool ProvjeriMogucnostDodavanja(
            Emisija emisija, IComponentRaspored dan, TvProgram program)
        {
            bool moguceDodati = true;

            if (program.GetPocetakPrikazivanja().TimeOfDay >
                emisija.GetVrijemePrikazivanja().TimeOfDay)
            {
                moguceDodati = false;
            }
            if (PostojiEmisijaKojaPocinjeUNavedenoVrijeme(dan, emisija.GetVrijemePrikazivanja()))
            {
                moguceDodati = false;
            }
            if (PostojiEmisijaKojaSeEmitiraUNavedenoVrijeme(
                    dan, emisija.GetVrijemePrikazivanja(), emisija.GetTrajanje()))
            {
                moguceDodati = false;
            }
            if (PrelaziPonocaXkrajPrograma(emisija, program))
            {
                moguceDodati = false;
            }
            return(moguceDodati);
        }
        private static void DodajEmisijeBezIcega(
            TvProgram program, List <VremenskiPlan> listaEmisijeBezIcega)
        {
            TvKucaSingleton tvKuca = TvKucaSingleton.GetTvKucaInstance();

            foreach (VremenskiPlan plan in listaEmisijeBezIcega)
            {
                Emisija trazena = tvKuca.ListaEmisija.Find(x => x.GetId() == plan.GetEmisijaId());
                if (trazena == null)
                {
                    IspisHelper.EmisijaNePostoji(plan.GetEmisijaId());
                    break;
                }
                bool uspioDodati = false;
                for (int i = 0; i < program.GetTjedan().Count; i++)
                {
                    if (program.GetTjedan()[i].GetChildList().Count == 0)
                    {
                        DodajEmisijuNaPocetakPrograma(program, trazena, plan, (i + 1));
                        uspioDodati = true;
                        break;
                    }
                    else if (program.GetTjedan()[i].GetChildList().Count == 1)
                    {
                        if (UspioDodatPrijePrve(program, trazena, plan, (i + 1)))
                        {
                            uspioDodati = true;
                            break;
                        }
                        else if (UspioDodatNakonZadnje(program, trazena, plan, (i + 1)))
                        {
                            uspioDodati = true;
                            break;
                        }
                    }
                    else
                    {
                        if (UspioDodatPrijePrve(program, trazena, plan, (i + 1)))
                        {
                            uspioDodati = true;
                            break;
                        }
                        else if (UspioDodatiIzmeduDvije(program, trazena, plan, (i + 1)))
                        {
                            uspioDodati = true;
                            break;
                        }
                        else if (UspioDodatNakonZadnje(program, trazena, plan, (i + 1)))
                        {
                            uspioDodati = true;
                            break;
                        }
                    }
                }
                if (!uspioDodati)
                {
                    IspisHelper.EmisijaNemoguceDodati(plan.GetEmisijaId(), program.GetNaziv());
                }
            }
        }
 private static void SortirajSveEmisijeUDanu(TvProgram program)
 {
     foreach (var dan in program.GetTjedan())
     {
         dan.GetChildList().Sort((a, b) =>
                                 DateTime.Compare(a.GetVrijemePrikazivanja(), b.GetVrijemePrikazivanja()));
     }
 }
        private static void DodajEmisijeJedanIliViseDana(
            TvProgram program, List <VremenskiPlan> listaEmisijeViseDana)
        {
            TvKucaSingleton tvKuca = TvKucaSingleton.GetTvKucaInstance();

            foreach (VremenskiPlan plan in listaEmisijeViseDana)
            {
                foreach (int brojDana in plan.GetListaDanaEmitiranja())
                {
                    bool    uspioDodati = false;
                    Emisija trazena     = tvKuca.ListaEmisija.Find(x => x.GetId() == plan.GetEmisijaId());
                    if (trazena == null)
                    {
                        IspisHelper.EmisijaNePostoji(plan.GetEmisijaId());
                        break;
                    }
                    if (program.GetTjedan()[brojDana - 1].GetChildList().Count == 0)
                    {
                        DodajEmisijuNaPocetakPrograma(program, trazena, plan, brojDana);
                        uspioDodati = true;
                    }
                    else if (program.GetTjedan()[brojDana - 1].GetChildList().Count == 1)
                    {
                        if (UspioDodatPrijePrve(program, trazena, plan, brojDana))
                        {
                            uspioDodati = true;
                        }
                        else if (UspioDodatNakonZadnje(program, trazena, plan, brojDana))
                        {
                            uspioDodati = true;
                        }
                    }
                    else
                    {
                        if (UspioDodatPrijePrve(program, trazena, plan, brojDana))
                        {
                            uspioDodati = true;
                        }
                        else if (UspioDodatiIzmeduDvije(program, trazena, plan, brojDana))
                        {
                            uspioDodati = true;
                        }
                        else if (UspioDodatNakonZadnje(program, trazena, plan, brojDana))
                        {
                            uspioDodati = true;
                        }
                    }

                    if (!uspioDodati)
                    {
                        IspisHelper.EmisijaNemoguceDodati(
                            plan.GetEmisijaId(), brojDana, program.GetNaziv());
                    }
                }
            }
        }
        private static void DodajEmisijuNaPocetakPrograma(TvProgram program, Emisija orig,
                                                          VremenskiPlan plan, int brojDana)
        {
            Emisija emisijaZaDodat = VratiNoviKopiraniObjekt(orig);

            DodajNoveOsobeUlogeEmisije(emisijaZaDodat, plan);
            emisijaZaDodat.SetVrijemePrikazivanja(program.GetPocetakPrikazivanja());
            DodjeliRedniBroj(emisijaZaDodat);
            program.GetTjedan()[(brojDana - 1)].AddChild(emisijaZaDodat);

            SubjectOsobaUlogaSingleton subject = SubjectOsobaUlogaSingleton.GetInstance();

            subject.AddObserver(emisijaZaDodat);
        }
Ejemplo n.º 9
0
        private static void IspisStatistikeZaProgram(TvProgram program)
        {
            Console.WriteLine(program.GetNaziv() + " - Prikaz statistike\n");
            for (int i = 0; i < program.GetTjedan().Count; i++)
            {
                Console.WriteLine(UnesiBrojDobijDan(i + 1) + " - statiska: ");

                //dvije emisije su mi uvijek zapravo signal TV kuce
                Console.WriteLine("\t - Broj emisija: " +
                                  (program.GetTjedan()[i].GetChildList().Count - 2));

                IspisPodatakaEmitiranjaEmisija(program, i);
                IspisPodatakaEmitiranjaTvSignala(program, i);
                IspisPodatakaSlobodnogVremena(program, i);
            }
        }
        private static void DodajEmitiranjeSingnalaTVKuceKraj(TvProgram program)
        {
            List <DateTime> listaKrajevaZadnjihEmisija = PronadiKrajeveZadnjihEmisija(program);

            for (int i = 0; i < program.GetTjedan().Count; i++)
            {
                Emisija emisijaZaDodat = new Emisija();
                emisijaZaDodat.SetId(1234);
                emisijaZaDodat.SetNaziv("SIGNAL S IDENTITETOM TV KUCE");
                emisijaZaDodat.SetListaOsobaUloga(new List <KeyValuePair <int, int> >());
                emisijaZaDodat.SetVrijemePrikazivanja(listaKrajevaZadnjihEmisija[i]);
                DateTime sutraPocetka = new DateTime(
                    DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.AddDays(1).Day, 0, 0, 0);
                TimeSpan timespan = sutraPocetka - emisijaZaDodat.GetVrijemePrikazivanja();
                emisijaZaDodat.SetTrajanje(int.Parse(timespan.TotalMinutes.ToString()));
                program.GetTjedan()[i].GetChildList().Add(emisijaZaDodat);
            }
        }
        private static List <DateTime> PronadiPocetkePrvihEmisija(TvProgram program)
        {
            List <DateTime> listaPocetakaPrvihEmisija = new List <DateTime>();

            for (int i = 0; i < program.GetTjedan().Count; i++)
            {
                var sortiranDan = program.GetTjedan()[i].GetChildList().OrderBy
                                      (o => o.GetVrijemePrikazivanja()).ToList <IComponentRaspored>();
                if (sortiranDan.Count == 0)
                {
                    listaPocetakaPrvihEmisija.Add(program.GetPocetakPrikazivanja());
                }
                else
                {
                    listaPocetakaPrvihEmisija.Add(sortiranDan[0].GetVrijemePrikazivanja());
                }
            }
            return(listaPocetakaPrvihEmisija);
        }
        public static void PopuniTjedniPlan(TvProgram program)
        {
            List <VremenskiPlan> listaZadaniPocetakDani;
            List <VremenskiPlan> listaEmisijaViseDana;
            List <VremenskiPlan> listaEmisijaBezIcega;

            listaZadaniPocetakDani = DohvatiEmisijeZadPocetIDani(program.GetVremenskiPlan());
            listaEmisijaViseDana   = DohvatiEmisijeJedanIliViseDana(program.GetVremenskiPlan());
            listaEmisijaBezIcega   = DohvatiEmisijeBezIcega(program.GetVremenskiPlan());
            DodajEmisijeZadaniPocetak(program, listaZadaniPocetakDani);
            DodajEmisijeJedanIliViseDana(program, listaEmisijaViseDana);
            DodajEmisijeBezIcega(program, listaEmisijaBezIcega);
            DodajEmitiranjeSingnalaTVKucePocetak(program);
            DodajEmitiranjeSingnalaTVKuceKraj(program);
            SortirajSveEmisijeUDanu(program);
            TvKucaSingleton tvKuca = TvKucaSingleton.GetTvKucaInstance();

            tvKuca.SetCompositeRaspored();
        }
        private static bool UspioDodatiIzmeduDvije(TvProgram program, Emisija orig,
                                                   VremenskiPlan plan, int brojDana)
        {
            Emisija emisijaZaDodat = VratiNoviKopiraniObjekt(orig);

            DodajNoveOsobeUlogeEmisije(emisijaZaDodat, plan);
            emisijaZaDodat.SetVrijemePrikazivanja(
                DohvatiVrijemeGdjeEmisijuMoguceUbacitiIzmeduDvijeEmisije(
                    program.GetTjedan()[brojDana - 1], emisijaZaDodat.GetTrajanje()));
            if (emisijaZaDodat.GetVrijemePrikazivanja().TimeOfDay !=
                DateTime.MinValue.TimeOfDay)
            {
                DodjeliRedniBroj(emisijaZaDodat);
                program.GetTjedan()[(brojDana - 1)].AddChild(emisijaZaDodat);
                SubjectOsobaUlogaSingleton subject = SubjectOsobaUlogaSingleton.GetInstance();
                subject.AddObserver(emisijaZaDodat);
                return(true);
            }
            return(false);
        }
        private static List <DateTime> PronadiKrajeveZadnjihEmisija(TvProgram program)
        {
            List <DateTime> listaKrajevaZadnjihEmisija = new List <DateTime>();

            for (int i = 0; i < program.GetTjedan().Count; i++)
            {
                var sortiranDan = program.GetTjedan()[i].GetChildList().OrderBy
                                      (o => o.GetVrijemePrikazivanja()).ToList <IComponentRaspored>();
                if (sortiranDan.Count == 0)
                {
                    listaKrajevaZadnjihEmisija.Add(program.GetKrajPrikazivanja());
                }
                else
                {
                    listaKrajevaZadnjihEmisija.Add(
                        sortiranDan[sortiranDan.Count - 1].GetVrijemePrikazivanja()
                        .AddMinutes(sortiranDan[sortiranDan.Count - 1].GetTrajanje()));
                }
            }
            return(listaKrajevaZadnjihEmisija);
        }
        private static DateTime DohvatiVrijemeEmisijuMoguceUbacitiPrijePrveEmisije(
            IComponentRaspored dan, int trajanje, TvProgram program)
        {
            DateTime vratiDatum = DateTime.MinValue;
            List <IComponentRaspored> sortiranDan = dan.GetChildList().OrderBy
                                                        (o => o.GetVrijemePrikazivanja()).ToList <IComponentRaspored>();

            DateTime pocetakPrveEmisije = new DateTime();

            pocetakPrveEmisije = sortiranDan[0].GetVrijemePrikazivanja();

            DateTime pocetakPrograma = new DateTime();

            pocetakPrograma = program.GetPocetakPrikazivanja();

            if (pocetakPrograma.AddMinutes(trajanje) <= pocetakPrveEmisije)
            {
                vratiDatum = pocetakPrograma;
                return(vratiDatum);
            }
            return(vratiDatum);
        }
        private static void DodajEmisijeZadaniPocetak(
            TvProgram program, List <VremenskiPlan> listaZadaniPocetakDani)
        {
            TvKucaSingleton            tvKuca  = TvKucaSingleton.GetTvKucaInstance();
            SubjectOsobaUlogaSingleton subject = SubjectOsobaUlogaSingleton.GetInstance();

            foreach (VremenskiPlan plan in listaZadaniPocetakDani)
            {
                foreach (int brojDana in plan.GetListaDanaEmitiranja())
                {
                    Emisija trazena = tvKuca.ListaEmisija.Find
                                          (x => x.GetId() == plan.GetEmisijaId());
                    if (trazena == null)
                    {
                        Console.WriteLine(" - Emisija sa ID: " + plan.GetEmisijaId() +
                                          " ne postoji! -> PRESKAČEM");
                        break;
                    }
                    Emisija emisijaZaDodat = VratiNoviKopiraniObjekt(trazena);
                    emisijaZaDodat.SetVrijemePrikazivanja(plan.GetPocetak());
                    DodajNoveOsobeUlogeEmisije(emisijaZaDodat, plan);
                    if (ProvjeriMogucnostDodavanja
                            (emisijaZaDodat, program.GetTjedan()[brojDana - 1], program))
                    {
                        DodjeliRedniBroj(emisijaZaDodat);
                        program.GetTjedan()[(brojDana - 1)].AddChild(emisijaZaDodat);
                        subject.AddObserver(emisijaZaDodat);
                    }
                    else
                    {
                        Console.WriteLine(" - " + brojDana + ".dan - Emisiju: " + emisijaZaDodat.GetId()
                                          + " vrijeme pocetka: " + emisijaZaDodat.GetVrijemePrikazivanja().TimeOfDay
                                          + ", " + emisijaZaDodat.GetNaziv() + " - trajanje: " +
                                          emisijaZaDodat.GetTrajanje() + " nije bilo moguće dodati u raspored.");
                    }
                }
            }
        }