From 9c47f5ac76cad0447adf7bbbd1217252b10aa5d2 Mon Sep 17 00:00:00 2001 From: Alex <78383757+Lextical@users.noreply.github.com> Date: Tue, 14 Apr 2026 22:43:24 -0600 Subject: [PATCH] added staff and customer images to desktop --- .../CustomerAccountsController.java | 35 +++++++++++++++++++ .../controllers/StaffAccountsController.java | 33 +++++++++++++++++ .../modelviews/customer-accounts-view.fxml | 1 + .../modelviews/staff-accounts-view.fxml | 1 + 4 files changed, 70 insertions(+) diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/CustomerAccountsController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/CustomerAccountsController.java index a4e073f3..eddf0df9 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/CustomerAccountsController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/CustomerAccountsController.java @@ -7,13 +7,17 @@ import javafx.collections.transformation.FilteredList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; +import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.*; +import javafx.scene.image.ImageView; +import javafx.scene.layout.StackPane; import javafx.stage.Modality; import javafx.stage.Stage; import org.example.petshopdesktop.api.dto.user.UserResponse; import org.example.petshopdesktop.api.endpoints.CustomerApi; import org.example.petshopdesktop.util.ActivityLogger; +import org.example.petshopdesktop.util.DesktopImageSupport; import org.example.petshopdesktop.util.TableViewSupport; import java.util.Comparator; @@ -25,6 +29,9 @@ public class CustomerAccountsController { @FXML private TableView tvCustomers; + @FXML + private TableColumn colCustomerAvatar; + @FXML private TableColumn colCustomerUsername; @@ -69,6 +76,13 @@ public class CustomerAccountsController { @FXML public void initialize() { + colCustomerAvatar.setCellValueFactory(data -> { + Long id = data.getValue().getId(); + if (id == null) return new javafx.beans.property.SimpleStringProperty(""); + return new javafx.beans.property.SimpleStringProperty("/api/v1/users/" + id + "/avatar/file"); + }); + configureAvatarColumn(colCustomerAvatar); + colCustomerUsername.setCellValueFactory(data -> new javafx.beans.property.SimpleStringProperty(data.getValue().getUsername())); colCustomerName.setCellValueFactory(data -> new javafx.beans.property.SimpleStringProperty(data.getValue().getFullName())); colCustomerEmail.setCellValueFactory(data -> new javafx.beans.property.SimpleStringProperty(data.getValue().getEmail())); @@ -94,6 +108,27 @@ public class CustomerAccountsController { refresh(); } + private void configureAvatarColumn(TableColumn column) { + column.setCellFactory(col -> new TableCell<>() { + private final ImageView imageView = new ImageView(); + private final StackPane container = new StackPane(imageView); + { + container.setAlignment(Pos.CENTER); + } + + @Override + protected void updateItem(String item, boolean empty) { + super.updateItem(item, empty); + if (empty || item == null || item.isBlank()) { + setGraphic(null); + return; + } + DesktopImageSupport.loadImageInto(imageView, item, 48, 48); + setGraphic(container); + } + }); + } + @FXML void btnRefreshClicked(ActionEvent event) { txtSearchCustomer.clear(); diff --git a/desktop/src/main/java/org/example/petshopdesktop/controllers/StaffAccountsController.java b/desktop/src/main/java/org/example/petshopdesktop/controllers/StaffAccountsController.java index a91d6080..36c7378b 100644 --- a/desktop/src/main/java/org/example/petshopdesktop/controllers/StaffAccountsController.java +++ b/desktop/src/main/java/org/example/petshopdesktop/controllers/StaffAccountsController.java @@ -7,8 +7,11 @@ import javafx.collections.transformation.FilteredList; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; +import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.*; +import javafx.scene.image.ImageView; +import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.stage.Modality; import javafx.stage.Stage; @@ -16,6 +19,7 @@ import org.example.petshopdesktop.api.dto.employee.EmployeeResponse; import org.example.petshopdesktop.api.endpoints.EmployeeApi; import org.example.petshopdesktop.auth.UserSession; import org.example.petshopdesktop.util.ActivityLogger; +import org.example.petshopdesktop.util.DesktopImageSupport; import org.example.petshopdesktop.util.TableViewSupport; import java.util.Comparator; @@ -26,6 +30,7 @@ public class StaffAccountsController { @FXML private VBox staffSection; @FXML private TableView tvStaff; + @FXML private TableColumn colStaffAvatar; @FXML private TableColumn colUsername; @FXML private TableColumn colName; @FXML private TableColumn colEmail; @@ -47,6 +52,13 @@ public class StaffAccountsController { @FXML public void initialize() { + colStaffAvatar.setCellValueFactory(data -> { + Long id = data.getValue().getId(); + if (id == null) return new javafx.beans.property.SimpleStringProperty(""); + return new javafx.beans.property.SimpleStringProperty("/api/v1/users/" + id + "/avatar/file"); + }); + configureAvatarColumn(colStaffAvatar); + colUsername.setCellValueFactory(data -> new javafx.beans.property.SimpleStringProperty(data.getValue().getUsername())); colName.setCellValueFactory(data -> new javafx.beans.property.SimpleStringProperty(data.getValue().getFullName())); colEmail.setCellValueFactory(data -> new javafx.beans.property.SimpleStringProperty(data.getValue().getEmail())); @@ -81,6 +93,27 @@ public class StaffAccountsController { refresh(); } + private void configureAvatarColumn(TableColumn column) { + column.setCellFactory(col -> new TableCell<>() { + private final ImageView imageView = new ImageView(); + private final StackPane container = new StackPane(imageView); + { + container.setAlignment(Pos.CENTER); + } + + @Override + protected void updateItem(String item, boolean empty) { + super.updateItem(item, empty); + if (empty || item == null || item.isBlank()) { + setGraphic(null); + return; + } + DesktopImageSupport.loadImageInto(imageView, item, 48, 48); + setGraphic(container); + } + }); + } + @FXML void btnRefreshClicked(ActionEvent event) { txtSearch.clear(); diff --git a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/customer-accounts-view.fxml b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/customer-accounts-view.fxml index d7156dab..dd28302c 100644 --- a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/customer-accounts-view.fxml +++ b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/customer-accounts-view.fxml @@ -69,6 +69,7 @@ + diff --git a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/staff-accounts-view.fxml b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/staff-accounts-view.fxml index c92851fc..d3b4c8d4 100644 --- a/desktop/src/main/resources/org/example/petshopdesktop/modelviews/staff-accounts-view.fxml +++ b/desktop/src/main/resources/org/example/petshopdesktop/modelviews/staff-accounts-view.fxml @@ -78,6 +78,7 @@ +