package me.corriekay.pokegoutil.gui.controller; import com.pokegoapi.exceptions.InvalidCurrencyException; import com.pokegoapi.exceptions.LoginFailedException; import com.pokegoapi.exceptions.RemoteServerException; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; import javafx.scene.control.ListView; import javafx.scene.control.ProgressBar; import javafx.scene.layout.AnchorPane; import javafx.stage.StageStyle; import me.corriekay.pokegoutil.data.models.BpmOperationResult; import me.corriekay.pokegoutil.data.models.PokemonModel; import me.corriekay.pokegoutil.data.models.operations.Operation; import me.corriekay.pokegoutil.utils.Utilities; /** * The OperationConfirmationController is use to handle all operations related actions. */ public class OperationConfirmationController extends BaseController<AnchorPane> { @FXML private ListView<Operation> operationListView; @FXML private ComboBox<?> chooseSettingComboBox; @FXML private AnchorPane settingPane; @FXML private Label waitingLabel; @FXML private ProgressBar progressBar; @FXML private Button startBtn; @FXML private Button pauseBtn; @FXML private Button cancelBtn; public OperationConfirmationController(final ObservableList<Operation> operations) { super(); initializeController(); operationListView.setItems(operations); } @FXML public void initialize() { startBtn.setOnAction(this::startOperations); pauseBtn.setOnAction(this::pauseOperations); cancelBtn.setOnAction(this::cancelOperations); } private void startOperations(final ActionEvent actionEvent) { operationListView.getItems().forEach(operation -> doOperation(operation)); System.out.println("Batch Operation Done"); } private void doOperation(final Operation operation){ final PokemonModel pokemon = operation.pokemon; BpmOperationResult result = null; try { result = operation.execute(); if (result.isSuccess()) { result.getSuccessMessageList().forEach(msg -> System.out.println(msg)); System.out.println(String.format( "%s %s", operation.getOperationId().getActionVerbFinished(), pokemon.getSummary())); } else { System.out.println(String.format( "Skipping %s due to <%s>", pokemon.getSummary(), result.getErrorMessage())); } } catch (InvalidCurrencyException | LoginFailedException | RemoteServerException e) { System.out.println(String.format( "Error %s %s! %s", operation.getOperationId().getActionVerbDuring(), pokemon.getSpecies(), Utilities.getRealExceptionMessage(e))); } operation.doDelay(); if(result != null && result.hasNextOperation()){ doOperation(Operation.generateOperation(result.getNextOperation(), pokemon)); } } private void pauseOperations(final ActionEvent actionEvent) { } private void cancelOperations(final ActionEvent actionEvent) { rootScene.getWindow().hide(); } @Override public String getFxmlLayout() { return "layout/ConfirmOperationWindow.fxml"; } @Override public void setGuiControllerSettings() { guiControllerSettings.setTitle("Please Review Operations"); guiControllerSettings.setStageStyle(StageStyle.UTILITY); guiControllerSettings.setResizeable(false); guiControllerSettings.setChangeToPrimaryStage(false); } }