Example #1
0
  // Menù utente autenticato
  private static void switchToLoggedInMenu(Scanner input, Client client) throws RemoteException {
    while (true) {

      // Mostra il nome completo dell'utente.
      System.out.println(
          "\n\n== PHOENIX CAR SHARING - " + client.getCurrentUser().getFullName() + " ==");
      try {
        // Se l'utente ha un'auto assegnata, la mostra
        Car currentCar = client.getCurrentCar();
        if (currentCar != null) {
          System.out.println("\n== AUTO ATTUALE: " + currentCar + " ==");
        }
      } catch (RemoteException e2) {
      }

      System.out.println("\n1. Cerca auto\n\n2. Conferma restituzione auto\n\n3. Logout");

      System.out.print("\n> ");
      int selection = input.nextInt();
      switch (selection) {
        case 1: // Cerca auto
          System.out.println(
              "\n\n== PHOENIX CAR SHARING: Cerca un'auto - "
                  + client.getCurrentUser().getFullName()
                  + " ==\n\n Che tipo di auto stai cercando?\n\n");

          try {
            for (Map.Entry<Integer, CarType> type : client.getCarTypes().entrySet()) {
              System.out.println(type.getKey() + ". " + type.getValue().toString());
            }

          } catch (RemoteException e1) {
            e1.printStackTrace();
            logStandardConnectionError(e1);
          }

          System.out.print("\n> ");
          int selectedType = input.nextInt();

          System.out.print("\n\n Inserisci il raggio entro cui vuoi cercare le auto: ");
          Double range = input.nextDouble();

          System.out.println(
              "\n\n Benissimo! Stiamo cercando un auto del tipo selezionato nel raggio selezionato…");

          try {
            client.searchCar(selectedType, range);

            // Attende finché il Server non ha contattato il callback, impostando il collegamento
            // all'auto
            client.getCurrentCar();

            System.out.println("\n\n L'auto ti è stata assegnata con successo! Buon viaggio!");
          } catch (RemoteException e1) {
            e1.printStackTrace();
            logStandardConnectionError(e1);
          } catch (UserAlreadyHaveCarException e1) {
            System.out.println(
                "\n\nERRORE: Ci risulta che tu sia già in possesso di un'auto. Non è al momento possibile noleggiare più di un'auto contemporaneamente. \nPer proseguire premi Invio. Nel menù che apparirà, scegli \"Conferma restituzione auto\" per segnalare la restituzione dell'auto attualmente in tuo possesso.");
          } catch (UnexistingSessionException e1) {
            System.out.println(
                "\n\nERRORE: Questa sessione non è autorizzata ad eseguire operazioni. Chiudi il programma e riprova.");
            return;
          }

          waitForEnterKey();
          break;

        case 2: // Restituisci auto
          try {
            System.out.println(
                "\n\n== PHOENIX CAR SHARING: Conferma restituzione auto - "
                    + client.getCurrentUser().getFullName()
                    + " ==\n\n Stai restituendo "
                    + client.getCurrentCar()
                    + "!\n\n");
          } catch (RemoteException e1) {
          }

          System.out.println(" Seleziona il parcheggio in cui hai lasciato l'auto:\n");

          try {
            for (Map.Entry<Integer, ParkingLot> parkingLot : client.getParkingLots().entrySet()) {
              System.out.println(parkingLot.getKey() + ". " + parkingLot.getValue().getName());
            }

          } catch (RemoteException e1) {
            e1.printStackTrace();
            logStandardConnectionError(e1);
          }

          System.out.print("\n> ");
          int selectedPark = input.nextInt();

          System.out.println(
              "\n\n Benissimo! Abbiamo preso in carico la tua richiesta, ti preghiamo di attendere.");

          try {
            client.parkCar(selectedPark);

            // Attendiamo finché il Server non ha contattato il callback, impostando l'auto
            // collegata a Null
            while (client.getCurrentCar() != null) {
              try {
                Thread.sleep(10);
              } catch (InterruptedException e) {
              }
            }

            System.out.println(
                "\n\n Hai confermato la consegna dell'auto! Grazie per aver viaggiato con Phoenix Car Sharing!");
          } catch (RemoteException e1) {
            e1.printStackTrace();
            logStandardConnectionError(e1);
          } catch (UserHaveNoCarException e1) {
            System.out.println(
                "\n\nERRORE: Ci risulta che tu non sia in possesso di alcuna auto. Se ciò non è corretto, ti preghiamo di rivolgerti ad uno dei nostri punti d'assistenza.");
          } catch (UnexistingSessionException e1) {
            System.out.println(
                "\n\nERRORE: Questa sessione non è autorizzata ad eseguire operazioni. Chiudi il programma e riprova.");
          }

          waitForEnterKey();

          break;

        case 3: // Logout
          try {
            client.logout();
            System.out.println("\nA presto!");
          } catch (RemoteException e) {
            e.printStackTrace();
            logStandardConnectionError(e);
          } catch (UnexistingSessionException e) {
            System.out.println(
                "\n\nERRORE: Questa sessione non è autorizzata ad eseguire operazioni. Il logout verrà eseguito comunque.");
          }
          return;

        default:
          System.out.println("Opzione non disponibile. Inserisci un numero compreso tra 1 e 3.");
          break;
      }
    }
  }