Exemplo n.º 1
0
        /// <summary>
        /// Verplaats de tram naar een ander spoor of sector
        /// </summary>
        /// <param name="tram">De tram die verplaatst moet worden</param>
        /// <param name="spoorVan">Het spoor waar die tram op staat</param>
        /// <param name="sectorVan">De sector waar die tram op staat</param>
        /// <param name="spoorNaar">Het spoor waar de tram naar toe gaat</param>
        /// <param name="sectorNaar">De sector waar de tram naar toe gaat.</param>
        /// <returns>Retourneert een fout string</returns>
        public bool TramVerplaatsen(Tram tram, Spoor spoorVan, Sector sectorVan, Spoor spoorNaar, Sector sectorNaar) //TODO: Exception geven wanneer het niet lukt. Dit in het form afhandelen.
        {
            foreach (Sector sector in spoorVan.Sectoren)
            {
                if (sector.Tram.ID == tram.ID)
                {
                    foreach (Sector naarSector in spoorNaar.Sectoren)
                    {
                        if (naarSector.ID == sectorNaar.ID)
                        {
                            sector.VerwijderTram();
                            naarSector.VerwijderTram();
                            DatabaseController dc = new DatabaseController();
                            if (dc.UpdateSector(sector, huidigeRemise))
                            {
                                if (dc.UpdateSector(naarSector, huidigeRemise))
                                {
                                    return(true);
                                }
                                else
                                {
                                    throw new TramVerplaatsException("De sector waar de tram naar verplaatst wordt kon niet worden geüpdate in de database!");
                                }
                            }
                            else
                            {
                                throw new TramVerplaatsException("De sector waarvan de tram word verplaats kon niet worden geüpdate in de database!");
                            }
                        }
                    }
                }
            }

            throw new TramVerplaatsException("De sector waarvan de tram word verplaats of de sector waarnaar de tram wordt verplaats kon niet gevonden worden!");
        }
        /// <summary>
        /// Deelt de tram in op een vrij onderhoudsspoor.
        /// </summary>
        /// <param name="tram"></param>
        /// <param name="dc"></param>
        public static void DeelTramInOpOnderhoudsSpoor(Tram tram, DatabaseController dc) //ToDo: Rekening houden met verbinding.
        {
            OnderhoudController oc        = new OnderhoudController(huidigeRemise);
            Onderhoud           onderhoud = oc.GetOnderhoud(tram);
            Spoor spoor = oc.GetVrijOnderhoudsSpoor();

            if (spoor != null)
            {
                Sector sector = spoor.GetEersteSector();
                sector.PlaatsTram(tram);

                if (sector.ID == spoor.Sectoren[(spoor.Sectoren.Count - 1)].ID)
                {
                    spoor.Beschikbaar = false;
                }

                dc.UpdateSpoor(spoor);
                dc.UpdateSector(sector, huidigeRemise);
                dc.UpdateTram(sector.Tram);
            }
            else
            {
                DeelTramInVolgensAlgoritme(tram, dc);
            }
        }
        /// <summary>
        /// Deelt de tram in op een vrij onderhoudsspoor.
        /// </summary>
        /// <param name="tram"></param>
        /// <param name="dc"></param>
        public static void DeelTramInOpReservering(Tram tram, DatabaseController dc) //ToDo: Rekening houden met verbinding.
        {
            BeheerController bc          = new BeheerController();
            Reservering      reservering = bc.GetReservering(tram);

            foreach (Spoor spoor in alleSporen)
            {
                if (reservering.Spoor.ID == spoor.ID)
                {
                    Sector sector = spoor.GetEersteSector();
                    if (sector == null)
                    {
                        DeelTramInVolgensAlgoritme(tram, dc);
                        return;
                    }
                    else
                    {
                        sector.PlaatsTram(tram);
                        if (sector.ID == spoor.Sectoren[(spoor.Sectoren.Count - 1)].ID)
                        {
                            spoor.Beschikbaar = false;
                        }
                        tram.Beschikbaar = true;
                        dc.UpdateSpoor(spoor);
                        dc.UpdateTram(tram);
                        dc.UpdateSector(sector, huidigeRemise);
                        dc.DeleteReservering(reservering.ID);
                    }
                }
            }
        }
 /// <summary>
 /// Deelt de tram in volgens het normaal algrotime.
 /// </summary>
 /// <param name="tram"></param>
 /// <param name="dc"></param>
 public static void DeelTramInVolgensAlgoritme(Tram tram, DatabaseController dc) //ToDo: Rekening houden met verbinding.
 {
     for (int x = 0; x < alleSporen.Count; x++)
     {
         if (alleSporen[x].Beschikbaar && alleSporen[x].SpoorType == SpoorType.Normaal) //TODO: spoor op niet beschikbaar zetten wanneer de laatste sector word gewijzigt naar niet beschikbaar of geblokkeerd.
         {
             for (int i = 0; i < alleSporen[x].Sectoren.Count; i++)
             {
                 if (alleSporen[x].Sectoren[i].Beschikbaar && !alleSporen[x].Sectoren[i].Geblokkeerd && alleSporen[x].GenoegVrijeSporen())
                 {
                     //Kijken of vertrektijd met vorige kan
                     //Kijken of vertrektijd met reservering kan
                     if (i - 1 != -1 && alleSporen[x].Sectoren[i - 1].Tram != null)
                     {
                         if (alleSporen[x].Sectoren[i - 1].Tram.Vertrektijd <= tram.Vertrektijd)
                         {
                             //plaats tram, TODO: Aparte MEthode volgende stuk
                             alleSporen[x].Sectoren[i].PlaatsTram(tram);
                             if (alleSporen[x].Sectoren[i].ID == alleSporen[x].Sectoren[(alleSporen[x].Sectoren.Count - 1)].ID)
                             {
                                 alleSporen[x].Beschikbaar = false;
                             }
                             dc.UpdateSpoor(alleSporen[x]);
                             dc.UpdateSector(alleSporen[x].Sectoren[i], huidigeRemise);
                             dc.UpdateTram(alleSporen[x].Sectoren[i].Tram);
                             return;
                         }
                     }
                     else if (i - 1 == -1)
                     {
                         //plaats tram, TODO: Aparte MEthode volgende stuk
                         alleSporen[x].Sectoren[i].PlaatsTram(tram);
                         if (alleSporen[x].Sectoren[i].ID == alleSporen[x].Sectoren[(alleSporen[x].Sectoren.Count - 1)].ID)
                         {
                             alleSporen[x].Beschikbaar = false;
                         }
                         dc.UpdateSpoor(alleSporen[x]);
                         dc.UpdateSector(alleSporen[x].Sectoren[i], huidigeRemise);
                         dc.UpdateTram(alleSporen[x].Sectoren[i].Tram);
                         return;
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 5
0
        /// <summary>
        /// Blokeert/deblokkeert een sector.
        /// </summary>
        /// <param name="spoorNummer"></param>
        /// <param name="sectorNummer"></param>
        public void ToggleSector(Sector sector) //TODO: Exception geven wanneer het niet lukt. Dit in het form afhandelen.
        {
            if (sector.Tram != null)
            {
                throw new ToggleSectorException("Er staat nog een tram op de sector.");
            }
            sector.Geblokkeerd = !sector.Geblokkeerd;
            sector.Beschikbaar = !sector.Beschikbaar;
            DatabaseController dc = new DatabaseController();

            if (!dc.UpdateSector(sector, huidigeRemise))
            {
                throw new ToggleSectorException("De sector kon niet worden geblokkeerd/gedeblokkeerd!");
            }
        }