/**
  * Parks a vehicle on an available spot in the parking. The vehicle <em>drive</em> method to
  * simulate driving the vehicle from reception to the parking spot.
  *
  * @param vehicle The <em>Vehicle</em> to be parked.
  * @return An <em>ParkingTicket</em> that can be used to retrieve the parked vehicle from the
  *     parking.
  */
 public ParkingTicket parkVehicle(T vehicle) {
   ParkingTicket ticket = new ParkingTicket(vehicle);
   ParkingSpot<T> spot = getFreeSpot();
   float distance = spot.getDistance();
   vehicle.start();
   vehicle.drive(distance);
   vehicle.stop();
   spot.parkVehicle(vehicle);
   keyCupboard.put(ticket.getUniqueTicket(), spot);
   return ticket;
 }
 /**
  * Retrieves a vehicle from the parking spot.
  *
  * @param ticket The <em>ticket</em> used to find the <em>Vehicle</em> in the parking.
  * @return The <em>Vehicle</em> that was parked.
  */
 public T retrieveVehicle(ParkingTicket ticket) {
   ParkingSpot<T> spot;
   T vehicle;
   spot = keyCupboard.get(ticket.getUniqueTicket());
   float distance = spot.getDistance();
   vehicle = spot.unparkVehicle();
   vehicle.start();
   vehicle.drive(distance);
   vehicle.stop();
   return vehicle;
 }
  public void readTicket(String[] args) {
    BufferedReader ticketTest = null;
    String line = "";

    try {
      ticketTest = new BufferedReader(new FileReader("src/test/resources/TicketTesting.txt"));

      while ((line = ticketTest.readLine()) != null) {
        String[] ticket = line.split(", ");

        ParkingTicket parkingTicket = new ParkingTicket();
        parkingTicket.setUniqueId();

        TicketValidation ticketValidation = new TicketValidation(ticket, parkingTicket);
        ticketValidation.validateTicket();

        if (ticketValidation.getIsValid()) {
          TransactionManager newTransaction = new TransactionManager(parkingTicket);
          newTransaction.processTicket();
        } else if (!ticketValidation.getIsValid()) {
          System.out.println("");
          System.out.println("Error with ticket! " + ticketValidation.getErrorReporting());
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
      throw new RuntimeException();
    } finally {
      if (ticketTest != null) {
        try {
          ticketTest.close();
        } catch (IOException e) {
          e.printStackTrace();
          throw new RuntimeException();
        }
      }
    }

    System.out.println("\nDone");
  }