From bb659cd1da9e033f323358c847bc4d7138984735 Mon Sep 17 00:00:00 2001 From: Besmir Beqiri Date: Fri, 15 Dec 2023 12:30:23 +0100 Subject: [PATCH] Simplify the error handling on the simple login app --- .../auth/example/simple/SimpleApp.java | 33 ++----------------- .../auth/example/simple/page/ErrorPage.java | 28 ++++++---------- 2 files changed, 13 insertions(+), 48 deletions(-) diff --git a/jpro-auth/example/src/main/java/one/jpro/platform/auth/example/simple/SimpleApp.java b/jpro-auth/example/src/main/java/one/jpro/platform/auth/example/simple/SimpleApp.java index c88b279e..e003d249 100644 --- a/jpro-auth/example/src/main/java/one/jpro/platform/auth/example/simple/SimpleApp.java +++ b/jpro-auth/example/src/main/java/one/jpro/platform/auth/example/simple/SimpleApp.java @@ -8,7 +8,6 @@ import one.jpro.platform.auth.core.AuthAPI; import one.jpro.platform.auth.core.authentication.User; import one.jpro.platform.auth.core.oauth2.OAuth2Credentials; -import one.jpro.platform.auth.example.showcase.LoginApp; import one.jpro.platform.auth.example.simple.page.ErrorPage; import one.jpro.platform.auth.example.simple.page.LoginPage; import one.jpro.platform.auth.example.simple.page.SignedInPage; @@ -26,6 +25,7 @@ import java.util.Optional; import static one.jpro.platform.routing.RouteUtils.getNode; +import static one.jpro.platform.routing.RouteUtils.viewFromNode; /** * The {@link SimpleApp} class extends {@link RouteApp} to create a JavaFX application @@ -60,7 +60,7 @@ public Route createRoute() { Optional.ofNullable(CupertinoLight.class.getResource(new CupertinoLight().getUserAgentStylesheet())) .map(URL::toExternalForm) .ifPresent(getScene()::setUserAgentStylesheet); - getScene().getStylesheets().add(LoginApp.class + getScene().getStylesheets().add(one.jpro.platform.auth.example.showcase.LoginApp.class .getResource("/one/jpro/platform/auth/example/css/login.css").toExternalForm()); final var googleAuthProvider = AuthAPI.googleAuth() @@ -75,15 +75,11 @@ public Route createRoute() { return Route.empty() .and(getNode("/", (r) -> new LoginPage(this, googleAuthProvider, googleCredentials))) .and(getNode("/user/signed-in", (r) -> new SignedInPage(this, googleAuthProvider))) - .and(getNode("/auth/error", (r) -> new ErrorPage(this))) .filter(DevFilter.create()) .filter(AuthFilters.oauth2(googleAuthProvider, googleCredentials, user -> { setUser(user); return FXFuture.unit(new Redirect("/user/signed-in")); - }, error -> { - setError(error); - return FXFuture.unit(new Redirect("/auth/error")); - })); + }, error -> FXFuture.unit(viewFromNode(new ErrorPage(error))))); } public ObservableMap getSession() { @@ -126,27 +122,4 @@ public final ObjectProperty userProperty() { } return userProperty; } - - // Error property - private ObjectProperty errorProperty; - - public final Throwable getError() { - return errorProperty == null ? null : errorProperty.get(); - } - - public final void setError(Throwable value) { - errorProperty().set(value); - } - - /** - * The error property contains the last error that occurred. - * - * @return the error property - */ - public final ObjectProperty errorProperty() { - if (errorProperty == null) { - errorProperty = new SimpleObjectProperty<>(this, "error"); - } - return errorProperty; - } } diff --git a/jpro-auth/example/src/main/java/one/jpro/platform/auth/example/simple/page/ErrorPage.java b/jpro-auth/example/src/main/java/one/jpro/platform/auth/example/simple/page/ErrorPage.java index 109e8613..329e3146 100644 --- a/jpro-auth/example/src/main/java/one/jpro/platform/auth/example/simple/page/ErrorPage.java +++ b/jpro-auth/example/src/main/java/one/jpro/platform/auth/example/simple/page/ErrorPage.java @@ -1,11 +1,9 @@ package one.jpro.platform.auth.example.simple.page; -import javafx.beans.binding.Bindings; import javafx.scene.control.Label; import javafx.scene.control.TextArea; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; -import one.jpro.platform.auth.example.simple.SimpleApp; import java.io.PrintWriter; import java.io.StringWriter; @@ -17,36 +15,30 @@ */ public class ErrorPage extends Page { - public ErrorPage(SimpleApp app) { + public ErrorPage(Throwable throwable) { final var headerLabel = new Label("Something unexpected happen:"); headerLabel.getStyleClass().add("header-label"); final var errorLabel = new Label(); errorLabel.setWrapText(true); errorLabel.getStyleClass().add("error-label"); - errorLabel.textProperty().bind(Bindings.createStringBinding(() -> { - final Throwable throwable = app.getError(); - return throwable == null ? "" : throwable.getMessage(); - }, app.errorProperty())); + errorLabel.setText(throwable == null ? "" : throwable.getMessage()); final var errorTextArea = new TextArea(); errorTextArea.getStyleClass().add("error-text-area"); VBox.setVgrow(errorTextArea, Priority.ALWAYS); - errorTextArea.textProperty().bind(Bindings.createStringBinding(() -> { - final Throwable throwable = app.getError(); - if (throwable == null) { - return ""; - } else { - final StringWriter sw = new StringWriter(); - final PrintWriter pw = new PrintWriter(sw); - throwable.printStackTrace(pw); - return sw.toString(); - } - }, app.errorProperty())); + errorTextArea.setText((throwable == null) ? "" : printStackTrace(throwable)); final var pane = new VBox(headerLabel, errorLabel, errorTextArea); pane.getStyleClass().add("error-pane"); getChildren().add(pane); } + + private String printStackTrace(Throwable throwable) { + final StringWriter sw = new StringWriter(); + final PrintWriter pw = new PrintWriter(sw); + throwable.printStackTrace(pw); + return sw.toString(); + } }