Ejemplo n.º 1
0
 public GarageManager(IUI ui, IGarageHandler handler, IVehicle vehicle, IUtil util)
 {
     this.ui          = ui;
     this.handler     = handler;
     this.vehicle     = vehicle;
     this.util        = util;
     Vehicle.Check    = RegNoExists;
     Vehicle.Callback = Run;
 }
        /// <summary>
        /// Metoden skapar och parkerar fordon
        /// Simulerar också att garaget är fullt
        /// </summary>
        private void Simulering()
        {
            // Hämta vald garagehandler
            IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid));

            if (garageHandler != null)
            {
                var(strId, strName, bIsFull, iCapacity, iNumberOfParkedVehicle) = garageHandler.GetGarageInfo();
                Simulering((iCapacity - iNumberOfParkedVehicle) + 2);
            }
        }
        /// <summary>
        /// Metod för att söka fordon med en speciell färg
        /// </summary>
        /// <returns>enum MenuInputResult med olika värden beroende på användarens kommando</returns>
        private MenuInputResult SearchForVehicleWithColor()
        {
            MenuInputResult result = MenuInputResult.NA;

            this.Ui.Clear();

            this.Ui.WriteLine(this.MenuFactory.GetMenu(MenuType.SEARCH_VEHICLE_WITH_COLOR));

            // Inläsning av sökt färg från användaren
            string strInput = this.Ui.ReadLine();

            if (!String.IsNullOrWhiteSpace(strInput))
            {
                strInput = strInput.Trim();
                if (strInput.Length == 1 && strInput.StartsWith('0'))
                {// Användaren har valt att avsluta programmet. Återgå till menyn
                    result = MenuInputResult.TO_GARAGE_MENU;
                    return(result);
                }
                else
                {
                    strInput = strInput.ToUpper();

                    // Hämta vald garagehandler
                    IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid));
                    if (garageHandler != null)
                    {
                        var lsVehicles = garageHandler.Garage.Where(v => ((IVehicle)v).Color.CompareTo(strInput) == 0).ToList();

                        if (lsVehicles?.Count > 0)
                        {
                            foreach (var vehicle in lsVehicles)
                            {
                                Ui.WriteLine(vehicle.ToString());
                            }
                        }
                        else
                        {
                            Ui.WriteLine($"Hittade inga fordon med färgen {strInput.ToLower().FirstToUpper()}");
                        }

                        Ui.WriteLine("Return för att fortsätta");
                        Ui.ReadLine();
                    }
                }
            }
            else
            {
                result = MenuInputResult.WRONG_INPUT;
            }

            return(result);
        }
        /// <summary>
        /// Metod för att låta användaren söka efter fordon på registreringsnumret
        /// </summary>
        /// <returns>enum MenuInputResult med olika värden beroende på användarens kommando</returns>
        private MenuInputResult SearchForVehicleWithRegistrationsNumber()
        {
            MenuInputResult result = MenuInputResult.NA;
            int             iCount = 0;

            this.Ui.Clear();

            this.Ui.WriteLine(this.MenuFactory.GetMenu(MenuType.SEARCH_VEHICLE_WITH_REGISTRATIONNUMBER));

            // Inläsning av sökt registreringsnummer från användaren
            string strInput = this.Ui.ReadLine();

            if (!String.IsNullOrWhiteSpace(strInput))
            {
                strInput = strInput.Trim();
                if (strInput.Length == 1 && strInput.StartsWith('0'))
                {// Användaren har valt att avsluta programmet. Återgå till menyn
                    result = MenuInputResult.TO_GARAGE_MENU;
                    return(result);
                }
                else
                {
                    strInput = strInput.ToUpper();

                    // Hämta vald garagehandler
                    IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid));
                    if (garageHandler != null)
                    {
                        // Det skall bara finnas ett fordon med registreringsnummer
                        var vehicle = garageHandler.Garage.FirstOrDefault(v => ((IVehicle)v).RegistrationNumber.CompareTo(strInput) == 0);
                        if (vehicle != null)
                        {
                            Ui.WriteLine(vehicle.ToString());
                        }
                        else
                        {
                            Ui.WriteLine("Hittade inga fordon med sökt registreringsnummer");
                        }

                        Ui.WriteLine("Return för att fortsätta");
                        Ui.ReadLine();
                    }
                }
            }
            else
            {
                result = MenuInputResult.WRONG_INPUT;
            }

            return(result);
        }
        /// <summary>
        /// Metoden listar information om alla parkerade bilar
        /// </summary>
        private void ListAllVehicle()
        {
            Car            car                       = null;
            Bus            bus                       = null;
            MotorCycle     motorCycle                = null;
            WheeledVehicle wheeledVehicle            = null;
            IVehicle       tmpVehicle                = null;
            int            iNumberOfSeatedPassengers = 0;

            // Hämta vald garagehandler
            IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid));

            if (garageHandler != null)
            {
                if (garageHandler.Garage.Count() > 0)
                {
                    foreach (ICanBeParkedInGarage vehicle in garageHandler.Garage)
                    {
                        tmpVehicle     = vehicle as IVehicle;
                        wheeledVehicle = vehicle as WheeledVehicle;
                        car            = vehicle as Car;
                        bus            = vehicle as Bus;
                        motorCycle     = vehicle as MotorCycle;

                        if (car != null)
                        {
                            iNumberOfSeatedPassengers = car.NumberOfSeatedPassengers;
                        }
                        else if (bus != null)
                        {
                            iNumberOfSeatedPassengers = bus.NumberOfSeatedPassengers;
                        }
                        else if (motorCycle != null)
                        {
                            iNumberOfSeatedPassengers = motorCycle.NumberOfSeatedPassengers;
                        }

                        Ui.WriteLine($"{tmpVehicle.Color?.ToLower()?.FirstToUpper()} {vehicle.GetType().Name} med registreringsnummer {tmpVehicle?.RegistrationNumber ?? "?"}. Har {wheeledVehicle?.NumberOfWheels ?? '?'} hjul och {iNumberOfSeatedPassengers} sittplatser");
                    }
                }
                else
                {
                    Ui.WriteLine("Det finns inga fordon i garaget");
                }

                Ui.WriteLine("Return för att fortsätta");
                Ui.ReadLine();
            }
        }
        /// <summary>
        /// Metoden parkerar fordonet i garaget
        /// </summary>
        /// <param name="vehicle">Vehicle som vi skall parkera i garaget</param>
        /// <returns>true om det gick parkera fordonet. Annars returneras false</returns>
        /// <exception cref="System.ArgumentNullException">Kastas om referensen till Vehicle är null</exception>
        private bool ParkVehicleInGarage(ICanBeParkedInGarage vehicle)
        {
            if (vehicle == null)
            {
                throw new ArgumentNullException("Exception. CreateAndParkVehicleMenu.ParkVehicleInGarage(). Referensen till vehicle är null");
            }

            bool bParkedVehicle = false;

            // Hämta garagehandler
            IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid));

            if (garageHandler != null)
            {
                if (garageHandler.ParkVehicle(vehicle))
                {// Vi har parkerat fordonet i garaget
                    bParkedVehicle = true;
                }
            }

            return(bParkedVehicle);
        }
        /// <summary>
        /// Metoden visar menyer där användaren kan välja vad hen  vill göra med ett garage
        /// </summary>
        /// <returns>enum MenuInputResult med olika värden beroende på användarens kommando</returns>
        public MenuInputResult Show()
        {
            MenuInputResult result = MenuInputResult.NA;

            do
            {
                this.Ui.Clear();

                if (result == MenuInputResult.WRONG_INPUT)
                {
                    this.Ui.WriteLine("Felaktig inmatning");
                }

                result = MenuInputResult.NA;

                // Hämta vald garagehandler
                IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid));

                if (garageHandler != null)
                {
                    var(strId, strName, bIsFull, iCapacity, iNumberOfParkedVehicle) = garageHandler.GetGarageInfo();

                    // Skapa en lämplig utskrift för menyn
                    string strIsFull = bIsFull ? "Nej" : "Ja";
                    this.Ui.WriteLine($"{strName}. Har lediga platser {strIsFull}. Antal bilar i garaget {iNumberOfParkedVehicle}");
                }

                // Visa menyn
                this.Ui.WriteLine(this.MenuFactory.GetMenu(MenuType.GARAGE_MENU));

                // Hantera inmatning från användaren
                result = HandleInput();
            }while (result != MenuInputResult.TO_MAIN_MENU);

            return(result);
        }
        /// <summary>
        /// Metoden skapar och parkerar önskat antal fordon
        /// </summary>
        /// <param name="iNumberOfVehicle">Antal fordon som skall skapas</param>
        private void Simulering(int iNumberOfVehicle)
        {
            // Hämta vald garagehandler
            IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid));

            if (garageHandler != null)
            {
                Ui.WriteLine("Simulerar att fordon parkeras i garaget");
                // Börja skapa lite fordon som parkeras i garaget
                IVehicleFactory      vehicleFactory = new VehicleFactory(this.RegistrationNumberRegister);
                ICanBeParkedInGarage vehicle        = null;
                IVehicle             tmpVehicle     = null;

                for (int i = 0; i < iNumberOfVehicle; i++)
                {
                    vehicle = vehicleFactory.CreateRandomVehicleForGarage();
                    if (garageHandler.ParkVehicle(vehicle))
                    {// Det gick parkera fordonet. Registrerar att registreringsnumret är upptaget
                        tmpVehicle = vehicle as IVehicle;
                        if (tmpVehicle != null)
                        {
                            this.RegistrationNumberRegister.AddRegistrationNumber(tmpVehicle.RegistrationNumber);
                        }
                    }
                }

                this.RegistrationNumberRegister.PrintRegister(this.Ui);
                garageHandler.PrintInformationAboutGarage();
                Ui.WriteLine("Return för att fortsätta");
                Ui.ReadLine();



                // Nu vill jag simulera att fordon lämnar garaget
                // Hämta info om garaget
                var(strId, strName, bIsFull, iCapacity, iNumberOfParkedVehicle) = garageHandler.GetGarageInfo();

                if (iNumberOfParkedVehicle > 1)
                {// Vi har minst ett parkerat fordon. Radera det första i arrayen
                    try
                    {
                        vehicle = garageHandler.Garage[0];
                        if (vehicle != null)
                        {
                            Ui.WriteLine("Simulerar att ett fordon lämnar garaget");

                            tmpVehicle = vehicle as IVehicle;
                            string strRegistrationNumber = String.Empty;
                            if (tmpVehicle != null)
                            {
                                strRegistrationNumber = tmpVehicle.RegistrationNumber;
                            }

                            if (garageHandler.RemoveVehicle(0))
                            {
                                this.RegistrationNumberRegister.RemoveRegistrationNumber(strRegistrationNumber);
                            }


                            this.RegistrationNumberRegister.PrintRegister(this.Ui);
                            garageHandler.PrintInformationAboutGarage();

                            Ui.WriteLine("Return för att fortsätta");
                            Ui.ReadLine();
                        }
                    }
                    catch (ArgumentOutOfRangeException)
                    { }
                }
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Metoden simulerar skapandet av ett garage.
        /// Skapande av bilar som parkerar och lämnar garaget
        /// Visar även vad som händer om garaget är full och någon vill parkera
        /// </summary>
        private void SimulateGarage()
        {
            // GetMainMenu
            Ui.WriteLine("Simulering av att skapa ett garage. Parkera fordon och fordon lämnar garaget");

            // Skapa en factory där jag kan skapa garage
            GarageFactory garageFactory = new GarageFactory();
            Guid          guid          = Guid.NewGuid();

            // Skapa ett garage
            var garage = garageFactory.CreateGarage(guid, "Första garaget", 5);

            // Skapa en GarageHandler som hantera allt om ett garage
            this.GarageHandlers.Add(new GarageHandler.GarageHandler(garage, this.Ui));

            Ui.WriteLine($"Har skapat ett nytt garage. " + garage);


            // Vid simuleringen har jag bara en garagehandler och ett garage. Hämta den handlern
            var            garageHandlers = this.GarageHandlers;
            IGarageHandler garageHandler  = garageHandlers[0];

            // Börja skapa lite fordon som parkeras i garaget
            IVehicleFactory vehicleFactory = new VehicleFactory(this.RegistrationNumberRegister);

            ICanBeParkedInGarage vehicle = vehicleFactory.CreateRandomVehicleForGarage();

            garageHandler.ParkVehicle(vehicle);

            ICanBeParkedInGarage vehicle1 = vehicleFactory.CreateRandomVehicleForGarage();

            garageHandler.ParkVehicle(vehicle1);

            ICanBeParkedInGarage vehicle2 = vehicleFactory.CreateRandomVehicleForGarage();

            garageHandler.ParkVehicle(vehicle2);

            ICanBeParkedInGarage vehicle3 = vehicleFactory.CreateRandomVehicleForGarage();

            garageHandler.ParkVehicle(vehicle3);

            ICanBeParkedInGarage vehicle4 = vehicleFactory.CreateRandomVehicleForGarage();

            garageHandler.ParkVehicle(vehicle4);

            // Garaget är fullt, men vi försöker parkera ett fordon till
            ICanBeParkedInGarage vehicle5 = vehicleFactory.CreateRandomVehicleForGarage();

            garageHandler.ParkVehicle(vehicle5);

            garageHandler.PrintInformationAboutGarage();


            // Ett fordon lämnar garaget
            garageHandler.RemoveVehicle(vehicle1);

            garageHandler.PrintInformationAboutGarage();

            // Ett fordon som inte finns i garaget lämnar
            garageHandler.RemoveVehicle(vehicle5);

            garageHandler.PrintInformationAboutGarage();

            Ui.WriteLine("Return för att fortsätta");
            Ui.ReadLine();
        }
        /// <summary>
        /// Metoden hantera input från användaren
        /// </summary>
        /// <returns>enum MenuInputResult med olika värden beroende på användarens kommando</returns>
        private MenuInputResult HandleInput()
        {
            IVehicle        tmpVehicle = null;
            MenuInputResult result     = MenuInputResult.TO_GARAGE_MENU;
            // Hämta vald garagehandler
            IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid));

            if (garageHandler != null)
            {
                // Inläsning av information från användaren
                string strInput = this.Ui.ReadLine();

                if (!String.IsNullOrWhiteSpace(strInput))
                {
                    strInput = strInput.Trim();
                    if (strInput.StartsWith('0'))
                    {// Användaren har valt att avsluta programmet. Återgå till menyn
                        result = MenuInputResult.TO_GARAGE_MENU;
                        return(result);
                    }
                    else if (strInput.StartsWith('1'))
                    {// Skapa en bil
                        var(menuInputResult, newVehicle) = CreateVehicle(Vehicle_Type.CAR);
                        result = menuInputResult;

                        if (result == MenuInputResult.TO_GARAGE_MENU)
                        {
                            return(result);
                        }

                        if (newVehicle != null)
                        {
                            // Parkera fordonet
                            if (ParkVehicleInGarage(newVehicle) == true)
                            {// Det gick parkera fordonet. Nu skall vi registrerar att registreringsnumret är upptaget
                                tmpVehicle = newVehicle as IVehicle;
                                if (tmpVehicle != null)
                                {
                                    // Nu behöver jag lägga till registreringsnumret till de upptagna registreringsnumren
                                    this.RegistrationNumberRegister.AddRegistrationNumber(tmpVehicle.RegistrationNumber);
                                }
                            }
                        }
                        else
                        {
                            if (menuInputResult == MenuInputResult.CREATE_VEHICLE_FAILED)
                            {
                                Ui.WriteLine("Det gick inte att skapa ett fordon");
                            }
                        }

                        Ui.WriteLine("Return för att fortsätta");
                        Ui.ReadLine();
                    }
                    else if (strInput.StartsWith('2'))
                    {// Skapa en buss
                        var(menuInputResult, newVehicle) = CreateVehicle(Vehicle_Type.BUS);
                        result = menuInputResult;

                        if (result == MenuInputResult.TO_GARAGE_MENU)
                        {
                            return(result);
                        }

                        if (newVehicle != null)
                        {
                            // Parkera fordonet
                            if (ParkVehicleInGarage(newVehicle) == true)
                            {// Det gick parkera fordonet. Nu skall vi registrerar att registreringsnumret är upptaget
                                tmpVehicle = newVehicle as IVehicle;
                                if (tmpVehicle != null)
                                {
                                    // Nu behöver jag lägga till registreringsnumret till de upptagna registreringsnumren
                                    this.RegistrationNumberRegister.AddRegistrationNumber(tmpVehicle.RegistrationNumber);
                                }
                            }
                        }
                        else
                        {
                            if (menuInputResult == MenuInputResult.CREATE_VEHICLE_FAILED)
                            {
                                Ui.WriteLine("Det gick inte att skapa ett fordon");
                            }
                        }

                        Ui.WriteLine("Return för att fortsätta");
                        Ui.ReadLine();
                    }
                    else if (strInput.StartsWith('3'))
                    {// Skapa en motorcykel
                        var(menuInputResult, newVehicle) = CreateVehicle(Vehicle_Type.MOTORCYCLE);
                        result = menuInputResult;

                        if (result == MenuInputResult.TO_GARAGE_MENU)
                        {
                            return(result);
                        }

                        if (newVehicle != null)
                        {
                            // Parkera fordonet
                            if (ParkVehicleInGarage(newVehicle) == true)
                            {// Det gick parkera fordonet. Nu skall vi registrerar att registreringsnumret är upptaget
                                tmpVehicle = newVehicle as IVehicle;
                                if (tmpVehicle != null)
                                {
                                    // Nu behöver jag lägga till registreringsnumret till de upptagna registreringsnumren
                                    this.RegistrationNumberRegister.AddRegistrationNumber(tmpVehicle.RegistrationNumber);
                                }
                            }
                        }
                        else
                        {
                            if (menuInputResult == MenuInputResult.CREATE_VEHICLE_FAILED)
                            {
                                Ui.WriteLine("Det gick inte att skapa ett fordon");
                            }
                        }

                        Ui.WriteLine("Return för att fortsätta");
                        Ui.ReadLine();
                    }
                    else
                    {
                        result = MenuInputResult.WRONG_INPUT;
                    }
                }
                else
                {
                    result = MenuInputResult.TO_GARAGE_MENU;
                }
            }

            return(result);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Metoden hantera input från användaren
        /// </summary>
        /// <returns>enum MenuInputResult med olika värden beroende på användarens kommando</returns>
        private MenuInputResult HandleInput()
        {
            int             iRemovedNumberOfVehicle = 0;
            MenuInputResult result = MenuInputResult.TO_GARAGE_MENU;
            // Hämta vald garagehandler
            IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid));

            if (garageHandler != null)
            {
                if (garageHandler.Garage.Count() > 0)
                {// Det finns fordon i Garaget
                    // Inläsning av vald siffra eller registreringsnummer
                    string strInput = this.Ui.ReadLine();

                    if (!String.IsNullOrWhiteSpace(strInput))
                    {
                        strInput = strInput.Trim();

                        if (strInput.Length == 1 && strInput.StartsWith('0'))
                        {// Användaren har valt att avsluta programmet. Återgå till huvudmenyn
                            result = MenuInputResult.TO_GARAGE_MENU;
                        }
                        else
                        {
                            strInput = strInput.ToUpper();

                            IVehicle tmpVehicle = null;
                            // Leta upp sökt fordon i garaget. Radera det. Om det gick radera skall vi även radera registreringsnumret från registret med upptagna registreringsnummer
                            foreach (ICanBeParkedInGarage vehicle in garageHandler.Garage)
                            {
                                tmpVehicle = vehicle as IVehicle;
                                if (tmpVehicle != null)
                                {
                                    if (tmpVehicle.RegistrationNumber.CompareTo(strInput) == 0)
                                    {     // Vi har hittat sökt fordon. Radera från garaget
                                        if (garageHandler.RemoveVehicle(vehicle))
                                        { // Vi har raderat fordonet från garaget
                                            // Radera registreringsnumret från registret av använda registreringsnummer
                                            this.RegistrationNumberRegister.RemoveRegistrationNumber(tmpVehicle.RegistrationNumber);

                                            iRemovedNumberOfVehicle++;
                                        }

                                        Ui.WriteLine("Return för att fortsätta");
                                        Ui.ReadLine();
                                        result = MenuInputResult.TO_GARAGE_MENU;
                                        break;
                                    }
                                }
                            }

                            if (iRemovedNumberOfVehicle == 0)
                            {
                                Ui.WriteLine("Bilen ni sökte finns inte i garaget");
                                Ui.WriteLine("Return för att fortsätta");
                                Ui.ReadLine();
                                result = MenuInputResult.TO_GARAGE_MENU;
                            }
                        }
                    }
                    else
                    {
                        result = MenuInputResult.TO_GARAGE_MENU;
                    }
                }
                else
                {
                    Ui.WriteLine("Det finns inga fordon i garaget");
                    Ui.WriteLine("Return för att återgå till menyn");
                    Ui.ReadLine();
                    result = MenuInputResult.TO_GARAGE_MENU;
                }
            }

            return(result);
        }
        /// <summary>
        /// Metoden söker efter vehicle med en sök text.
        /// Gör sökningen på ett antal properties och sammanställer resultatet
        /// </summary>
        /// <returns>enum MenuInputResult med olika värden beroende på användarens kommando</returns>
        private MenuInputResult SearchForVehicleWithText()
        {
            // Listor med sök ord som har matchat något i sökningarna efter vehicle
            List <string> lsMatchedRegistrationnumbers = new List <string>();
            List <string> lsMatchedColors                   = new List <string>();
            List <string> lsMatchedTypes                    = new List <string>();
            List <int>    lsMatchedNumberOfWheels           = new List <int>();
            List <int>    lsMatchedNumberOfSeatedPassengers = new List <int>();

            // Sammanställd lista med resultat av sökningen
            List <ICanBeParkedInGarage> lsVehicle = new List <ICanBeParkedInGarage>();
            MenuInputResult             result    = MenuInputResult.NA;

            this.Ui.Clear();

            // Skriv ut menyn
            this.Ui.WriteLine(this.MenuFactory.GetMenu(MenuType.SEARCH_VEHICLE_WITH_TEXT));


            // Läs in data från användaren
            string strInput = this.Ui.ReadLine();

            if (!String.IsNullOrWhiteSpace(strInput))
            {
                strInput = strInput.Trim();
                if (strInput.Length == 1 && strInput.StartsWith('0'))
                {// Användaren har valt att avsluta programmet. Återgå till menyn
                    result = MenuInputResult.TO_GARAGE_MENU;
                    return(result);
                }
                else
                {
                    strInput = strInput.ToLower();
                    string[] strArray = strInput.Split(' ', StringSplitOptions.RemoveEmptyEntries);
                    int      iNumber  = 0;

                    if (strArray.Length > 0)
                    {
                        // Hämta vald garagehandler
                        IGarageHandler garageHandler = this.GarageHandlers.FirstOrDefault(g => g.GuidId.Equals(this.SelectedGarageHandlerGuid));
                        if (garageHandler != null)
                        {
                            foreach (string str in strArray)
                            {
                                if (!String.IsNullOrWhiteSpace(str))
                                {// Vi har tecken. Gör en sökning
                                    // Sök på registreringsnummer
                                    var tmpVehiclesRegistrationNumber = garageHandler.Garage.Where(v => ((IVehicle)v).RegistrationNumber.Equals(str, StringComparison.OrdinalIgnoreCase)).ToList();
                                    if (tmpVehiclesRegistrationNumber?.Count > 0)
                                    {
                                        lsVehicle.AddRange(tmpVehiclesRegistrationNumber);
                                        lsMatchedRegistrationnumbers.Add(str);
                                    }

                                    // Sök på färg
                                    var tmpVehiclesColor = garageHandler.Garage.Where(v => ((IVehicle)v).Color.Equals(str, StringComparison.OrdinalIgnoreCase)).ToList();
                                    if (tmpVehiclesColor?.Count > 0)
                                    {
                                        lsVehicle.AddRange(tmpVehiclesColor);
                                        lsMatchedColors.Add(str);
                                    }

                                    // Sök på fordonstyp
                                    var tmpVehiclesType = garageHandler.Garage.Where(v => v.GetType().Name.Equals(str, StringComparison.OrdinalIgnoreCase)).ToList();
                                    if (tmpVehiclesType?.Count > 0)
                                    {
                                        lsVehicle.AddRange(tmpVehiclesType);
                                        lsMatchedTypes.Add(str);
                                    }

                                    if (Int32.TryParse(str, out iNumber))
                                    {
                                        // Sök på antalet hjul
                                        var tmpVehiclesNumberOfWheels = garageHandler.Garage.Where(v => ((WheeledVehicle)v).NumberOfWheels == iNumber).ToList();
                                        if (tmpVehiclesNumberOfWheels?.Count > 0)
                                        {
                                            lsVehicle.AddRange(tmpVehiclesNumberOfWheels);
                                            lsMatchedNumberOfWheels.Add(iNumber);
                                        }

                                        // Sök på antalet sittande passagerare
                                        var tmpVehiclesNumberOfSeatedPassengers = garageHandler.Garage.Where(v => ((WheeledVehicle)v).NumberOfSeatedPassengers == iNumber).ToList();
                                        if (tmpVehiclesNumberOfSeatedPassengers?.Count > 0)
                                        {
                                            lsVehicle.AddRange(tmpVehiclesNumberOfSeatedPassengers);
                                            lsMatchedNumberOfSeatedPassengers.Add(iNumber);
                                        }
                                    }
                                }
                            }// End of foreach strArray



                            // Nu skall vi filtrera listan med fordon som har matchat något i sökningen
                            if (lsVehicle?.Count > 0)
                            {
                                // Nu vill jag filtrera resultatet med de ord i texten som vi har fått matchningar
                                lsVehicle = FilterSearchResult(lsVehicle, lsMatchedRegistrationnumbers, lsMatchedColors, lsMatchedTypes, lsMatchedNumberOfWheels, lsMatchedNumberOfSeatedPassengers);

                                // Se till att alla dubbletter försvinner
                                lsVehicle = lsVehicle.Distinct().ToList();

                                if (lsVehicle?.Count > 0)
                                {
                                    // Skriv ut de fordon som sökningen matchar
                                    foreach (IVehicle vehicle in lsVehicle)
                                    {
                                        Ui.WriteLine(vehicle.ToString());
                                    }
                                }
                                else
                                {
                                    Ui.WriteLine($"Hittade inga fordon med sökningen {strInput}");
                                }
                            }
                            else
                            {
                                Ui.WriteLine($"Hittade inga fordon med sökningen {strInput}");
                            }

                            Ui.WriteLine("Return för att fortsätta");
                            Ui.ReadLine();
                        }
                    }
                    else
                    {
                        result = MenuInputResult.WRONG_INPUT;
                    }
                }
            }
            else
            {
                result = MenuInputResult.WRONG_INPUT;
            }

            return(result);
        }
Ejemplo n.º 13
0
 public GarageManager(IUI ui, IGarageHandler handler)
 {
     this.ui      = ui;
     this.handler = handler;
     menyOptions  = GetMenyOptions();
 }