package com.insightfullogic.honest_profiler.ports.javafx.controller.dialog; import java.util.Optional; import com.insightfullogic.honest_profiler.ports.javafx.controller.AbstractController; import javafx.scene.control.ButtonType; import javafx.scene.control.Dialog; import javafx.util.Callback; /** * Abstract superclass for DialogController implementations. * <p> * * @param <R> the return type of the {@link Dialog} */ public abstract class AbstractDialogController<R> extends AbstractController { private Dialog<R> dialog; /** * This method must be called by subclasses in their FXML initialize(). * <p> * The idea is to streamline similar tasks happening in the initialization method, and encourage decluttering of the * initialize() methods by extracting similar tasks to separate methods. */ protected void initialize(Dialog<R> dialog) { super.initialize(); this.dialog = dialog; dialog.setResultConverter(createResultHandler()); } public void show() { this.dialog.show(); } public Optional<R> showAndWait() { return this.dialog.showAndWait(); } public abstract Callback<ButtonType, R> createResultHandler(); public abstract void reset(); }