// 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; } } }