Beispiel #1
0
        public static void AddStations(IEnumerable <Station> stations)
        {
            using (var context = new StationsContext())
            {
                foreach (var station in stations)
                {
                    // Validate Name
                    if (station.Name == null ||
                        station.Name.Length > 50 ||
                        context.Stations.Any(s => s.Name == station.Name))
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }
                    // Validate Town
                    if (station.Town != null && station.Town.Length > 50)
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }
                    // Use station name if town name not provided
                    station.Town = station.Town ?? station.Name;

                    // Add station to DB
                    context.Stations.Add(station);
                    context.SaveChanges();

                    // Success Notification
                    Console.WriteLine($"Record {station.Name} successfully imported.");
                }
            }
        }
Beispiel #2
0
        public static void Main()
        {
            Database.SetInitializer(new DropCreateDatabaseAlways <StationsContext>());

            StationsContext context     = new StationsContext();
            QueryHelper     queryHelper = new QueryHelper(context);

            ImportHandler importHandler = new ImportHandler(queryHelper);

            // Import JSON.
            importHandler.ImportStations(File.ReadAllText("../../Datasets/stations.json"));
            importHandler.ImportClasses(File.ReadAllText("../../Datasets/classes.json"));
            importHandler.ImportTrains(File.ReadAllText("../../Datasets/trains.json"));
            importHandler.ImportTrips(File.ReadAllText("../../Datasets/trips.json"));

            // Import XML.
            importHandler.ImportCards(File.ReadAllText("../../Datasets/cards.xml"));
            importHandler.ImportTickets(File.ReadAllText("../../Datasets/tickets.xml"));

            ExportHandler exportHandler = new ExportHandler(queryHelper);

            // Export JSON.
            exportHandler.ExportDelayedTrains("../../Datasets/", "01/01/2017");
            exportHandler.ExportCardsTicket("../../Datasets/", "Elder");
        }
        public static void AddSeatingClasses(IEnumerable <SeatingClass> seatingClasses)
        {
            using (var context = new StationsContext())
            {
                foreach (var seatingClass in seatingClasses)
                {
                    // Validate Name
                    if (seatingClass.Name == null || seatingClass.Name.Length > 30 ||
                        context.SeatingClasses.Any(c => c.Name == seatingClass.Name))
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }
                    // Validate Abbreviation
                    if (seatingClass.Abbreviation == null || seatingClass.Abbreviation.Length != 2)
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }

                    // Add seating class to DB
                    context.SeatingClasses.Add(seatingClass);
                    context.SaveChanges();

                    // Success Notification
                    Console.WriteLine($"Record {seatingClass.Name} successfully imported.");
                }
            }
        }
Beispiel #4
0
        public static void AddTrips(IEnumerable <TripImportDto> tripDtos)
        {
            using (var context = new StationsContext())
            {
                string dateFormat     = "dd/MM/yyyy HH:mm";
                string timeDiffFormat = "g";

                foreach (var tripDto in tripDtos)
                {
                    // Validate required input
                    if (tripDto.OriginStation == null ||
                        tripDto.DestinationStation == null ||
                        tripDto.DepartureTime == null ||
                        tripDto.ArrivalTime == null ||
                        tripDto.Train == null)
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }
                    // Validate Train, origin & destination Stations
                    Train   train              = context.Trains.FirstOrDefault(t => t.TrainNumber == tripDto.Train);
                    Station originStation      = context.Stations.FirstOrDefault(s => s.Name == tripDto.OriginStation);
                    Station destinationStation = context.Stations.FirstOrDefault(s => s.Name == tripDto.DestinationStation);
                    if (train == null || originStation == null || destinationStation == null)
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }
                    // Validate Departure time < Arrival time
                    DateTime departureTime = DateTime.ParseExact(tripDto.DepartureTime, dateFormat, CultureInfo.InvariantCulture);
                    DateTime arrivalTime   = DateTime.ParseExact(tripDto.ArrivalTime, dateFormat, CultureInfo.InvariantCulture);
                    if (departureTime >= arrivalTime)
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }

                    TimeSpan timeDifference = TimeSpan.ParseExact(tripDto.TimeDifference ?? "00:00", timeDiffFormat, CultureInfo.InvariantCulture);

                    // Add trip to DB
                    Trip trip = new Trip
                    {
                        TrainId              = train.Id,
                        OriginStationId      = originStation.Id,
                        DestinationStationId = destinationStation.Id,
                        DepartureTime        = departureTime,
                        ArrivalTime          = arrivalTime,
                        Status         = tripDto.Status,
                        TimeDifference = timeDifference
                    };
                    context.Trips.Add(trip);
                    context.SaveChanges();

                    // Success Notification
                    Console.WriteLine($"Trip from {tripDto.OriginStation} to {tripDto.DestinationStation} imported.");
                }
            }
        }
        public static void AddTickets(List <TicketImportDto> ticketDtos)
        {
            using (var context = new StationsContext())
            {
                foreach (var ticketDto in ticketDtos)
                {
                    // Validate input
                    Trip trip = context.Trips
                                .FirstOrDefault(t =>
                                                t.OriginStation.Name == ticketDto.OriginStation &&
                                                t.DestinationStation.Name == ticketDto.DestinationStation &&
                                                t.DepartureTime == ticketDto.DepartureTime);
                    CustomerCard card = context.CustomerCards
                                        .FirstOrDefault(c => c.Name == ticketDto.CardName);
                    SeatingClass seatingClass = context.SeatingClasses
                                                .FirstOrDefault(c => c.Abbreviation == ticketDto.Seat.Substring(0, 2));

                    if (trip == null || card == null || seatingClass == null)
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }
                    // Validate train seats
                    var trainSeats = context.TrainSeats
                                     .FirstOrDefault(ts => ts.TrainId == trip.TrainId && ts.SeatingClassId == seatingClass.Id);
                    if (trainSeats == null)
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }
                    // Validate seat number
                    int seatNumber = int.Parse(ticketDto.Seat.Substring(2));
                    if (seatNumber < 0 || seatNumber > trainSeats.Quantity)
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }

                    // Add ticket to DB
                    Ticket ticket = new Ticket
                    {
                        TripId         = trip.Id,
                        Price          = ticketDto.Price,
                        SeatingPlace   = ticketDto.Seat,
                        PersonalCardId = card.Id
                    };
                    context.Tickets.Add(ticket);
                    context.SaveChanges();

                    // Success Notification
                    Console.WriteLine($"Ticket from {ticketDto.OriginStation} to {ticketDto.DestinationStation} departing at {ticketDto.DepartureTime} imported.");
                }
            }
        }
        private static void Main()
        {
            StationsContext context       = new StationsContext();
            HelperMethods   helperMethods = new HelperMethods(context);

            Import import = new Import(helperMethods);

            import.ImportStations(File.ReadAllText("../../../datasets/stations.json"));
            import.ImportClasses(File.ReadAllText("../../../datasets/classes.json"));
            import.ImportTrains(File.ReadAllText("../../../datasets/trains.json"));
            import.ImportTrips(File.ReadAllText("../../../datasets/trips.json"));

            import.ImportCards(File.ReadAllText("../../../datasets/cards.xml"));
            import.ImportTickets(File.ReadAllText("../../../datasets/tickets.xml"));

            Export export = new Export(helperMethods);

            export.ExportDelayedTrains("../../../datasets/", "01/01/2017");
            export.ExportCardsTicket("../../../datasets/", "Debilitated");
        }
Beispiel #7
0
 public static void AddStation(ICollection <Station> stations)
 {
     using (var ctx = new StationsContext())
     {
         foreach (var station in stations)
         {
             if (((station.Name.Length > 50) || (station.Town.Length > 50)) || (station.Name == null))
             {
                 Console.WriteLine("Invalid data format.");
             }
             else if (station.Town == null)
             {
                 station.Town = station.Name;
                 ctx.Stations.Add(station);
                 Console.WriteLine($"Record {station} successfully imported.");
             }
         }
         ctx.SaveChanges();
     }
 }
 public static void AddSeatingClass(ICollection <SeatingClass> seatclasses)
 {
     using (var ctx = new StationsContext())
     {
         foreach (var seatclass in seatclasses)
         {
             if ((seatclass.Name.Length > 30) ||
                 (seatclass.Abbreviation.Length < 2) ||
                 (seatclass.Abbreviation.Length > 2) ||
                 (ctx.SeatingClasses.Where(sc => sc.Name == seatclass.Name) != null))
             {
                 Console.WriteLine("Invalid data format.");
             }
             else
             {
                 ctx.SeatingClasses.Add(seatclass);
             }
         }
         ctx.SaveChanges();
     }
 }
Beispiel #9
0
        public static void AddCards(List <CustomerCard> cards)
        {
            using (var context = new StationsContext())
            {
                foreach (var card in cards)
                {
                    // Validate input
                    if (card.Name == null || card.Name.Length > 128 ||
                        card.Age < 0 || card.Age > 120)
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }

                    // Add Card to DB
                    context.CustomerCards.Add(card);
                    context.SaveChanges();

                    // Success Notification
                    Console.WriteLine($"Record {card.Name} successfully imported.");
                }
            }
        }
Beispiel #10
0
        public static void AddTrain(ICollection <TrainSeatsDTO> trains)
        {
            using (var ctx = new StationsContext())
            {
                foreach (var train in trains)
                {
                    bool           isValid       = true;
                    List <SeatDTO> seatClasNames = new List <SeatDTO>();
                    foreach (var seat in train.Seats)
                    {
                        var seatVal = train.Seats
                                      .Where(s => s.SeatClassName == seat.SeatClassName)
                                      .SingleOrDefault();
                        bool nameSet = false;

                        foreach (var st in seatClasNames)
                        {
                            if (seat.SeatClassName == st.SeatClassName)
                            {
                                nameSet = true;
                            }
                        }

                        if (!nameSet)
                        {
                            seatClasNames.Add(seat);
                        }

                        if (((seat.SeatClassName == null) || (seat.Abbreviation == null)) ||
                            (seat.Abbreviation != seatVal.Abbreviation) ||
                            (seat.Quantity <= 0) ||
                            (nameSet == true))
                        {
                            isValid = false;
                        }
                    }

                    if (((train.Type != null) &&
                         (train.Type != "HighSpeed" ||
                          train.Type != "LongDistance" ||
                          train.Type != "Freight")) ||
                        (isValid == false))
                    {
                        Console.WriteLine("Invalid data format.");
                    }
                    else
                    {
                        var thisTrain = new Train();
                        thisTrain.TrainNumber = train.TrainTrainNumber;
                        thisTrain.Type        = train.Type;
                        //ctx.Trains.Add(thisTrain);

                        var trainSeats = new TrainSeats();
                        trainSeats.Train = thisTrain;
                        foreach (var seat in seatClasNames)
                        {
                            trainSeats.SeatClass = ctx.SeatingClasses
                                                   .Where(sc => sc.Name == seat.SeatClassName)
                                                   .SingleOrDefault();
                            trainSeats.Quantity = seat.Quantity;
                            Console.WriteLine($"Record {seat.SeatClassName} successfully imported.");
                        }
                        ctx.TrainsSeats.Add(trainSeats);
                        Console.WriteLine($"Record {trainSeats.Train.TrainNumber} successfully imported.");
                    }
                }
                ctx.SaveChanges();
            }
        }
Beispiel #11
0
        public static void ImportTrains(IEnumerable <TrainImportDto> trainDtos)
        {
            using (var context = new StationsContext())
            {
                foreach (var trainDto in trainDtos)
                {
                    // Validate TrainNumber
                    if (trainDto.TrainNumber == null ||
                        trainDto.TrainNumber.Length > 10 ||
                        context.Trains.Any(t => t.TrainNumber == trainDto.TrainNumber))
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }
                    // Validate TrainType
                    if (trainDto.Type == null)
                    {
                        Console.WriteLine("Invalid data format.");
                        continue;
                    }
                    // Validate Seats
                    bool isValidEntity = true;
                    foreach (var seatDto in trainDto.Seats)
                    {
                        if (seatDto.Name == null ||
                            seatDto.Abbreviation == null ||
                            seatDto.Quantity == null ||
                            seatDto.Quantity < 0 ||
                            !context.SeatingClasses.Any(c => c.Name == seatDto.Name && c.Abbreviation == seatDto.Abbreviation))
                        {
                            isValidEntity = false;
                            Console.WriteLine("Invalid data format.");
                            break;
                        }
                    }
                    // Ignore invalid entities
                    if (!isValidEntity)
                    {
                        continue;
                    }

                    // Add train & train seats to DB
                    Train train = new Train
                    {
                        TrainNumber = trainDto.TrainNumber,
                        Type        = (TrainType)trainDto.Type,
                        TrainSeats  = new List <TrainSeat>()
                    };

                    foreach (var seatDto in trainDto.Seats)
                    {
                        train.TrainSeats.Add(new TrainSeat
                        {
                            SeatingClassId = context.SeatingClasses.FirstOrDefault(c => c.Name == seatDto.Name).Id,
                            Quantity       = (int)seatDto.Quantity
                        });
                    }

                    context.Trains.Add(train);
                    context.SaveChanges();

                    // Success Notification
                    Console.WriteLine($"Record {trainDto.TrainNumber} successfully imported.");
                }
            }
        }
Beispiel #12
0
        public static void AddTrip(ICollection <TripDTO> trips)
        {
            bool isValid = true;

            using (var ctx = new StationsContext())
            {
                foreach (var trip in trips)
                {
                    if ((trip.Train == null) ||
                        (trip.OriginStation == null) ||
                        (trip.DestinationStation == null) ||
                        (trip.DepartureTime == null) ||
                        (trip.ArrivalTime == null))
                    {
                        isValid = false;
                    }
                    if ((trip.Status != null) &&
                        ((trip.Status != "OnTime") &&
                         (trip.Status != "Delayed") &&
                         (trip.Status != "Early")))
                    {
                        isValid = false;
                    }
                    if (ctx.Trains
                        .Where(tr => tr.TrainNumber == trip.Train)
                        .FirstOrDefault() == null)
                    {
                        isValid = false;
                    }
                    if ((ctx.Stations
                         .Where(st => st.Name == trip.OriginStation.Name)
                         .FirstOrDefault() == null) ||
                        (ctx.Stations
                         .Where(st => st.Name == trip.DestinationStation.Name)
                         .FirstOrDefault() == null))
                    {
                        isValid = false;
                    }
                    if (trip.DepartureTime >= trip.ArrivalTime)
                    {
                        isValid = false;
                    }

                    if (isValid == false)
                    {
                        Console.WriteLine("Invalid data format.");
                    }
                    else
                    {
                        var thisTrip = new Trip();
                        thisTrip.StationOfOrigin = trip.OriginStation;
                        thisTrip.StationOfOrigin = trip.DestinationStation;
                        thisTrip.Train           = ctx.Trains
                                                   .Where(tr => tr.TrainNumber == trip.Train)
                                                   .SingleOrDefault();
                        thisTrip.DepartureTime = trip.DepartureTime;
                        thisTrip.ArrivalTime   = trip.ArrivalTime;
                        thisTrip.Status        = trip.Status;
                        ctx.Trips.Add(thisTrip);
                    }
                }
                ctx.SaveChanges();
            }
        }