From 779e456f237c4b776d235ee86ecef3d7c15758e8 Mon Sep 17 00:00:00 2001 From: Mateusz Kowalczyk Date: Sat, 1 Feb 2020 00:08:19 +0100 Subject: [PATCH] add showing photos per person and prepare for building --- pom.xml | 13 +++++++++++ .../ffm/app/WorkspaceService.java | 7 ++++-- .../ffm/app/WorkspaceWrapper.java | 12 +++++++++- .../ffm/data/database/photo/PhotoDAO.java | 23 +++++++++++++++++++ .../view/workspace/MainPageController.java | 9 ++++++++ .../view/workspace/elements/ElementsEnum.java | 1 + .../elements/FaceContainerController.java | 4 ++++ .../elements/ImageContainerController.java | 14 ++++++++--- .../workspace/elements/face_container.fxml | 3 ++- 9 files changed, 79 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 2629063..f36f105 100644 --- a/pom.xml +++ b/pom.xml @@ -58,6 +58,19 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.1.0 + + + + true + dev.mateuszkowalczyk.ffm.Main + + + + maven-compiler-plugin 3.8.1 diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/app/WorkspaceService.java b/src/main/java/dev/mateuszkowalczyk/ffm/app/WorkspaceService.java index e3c9eda..c629919 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/app/WorkspaceService.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/app/WorkspaceService.java @@ -2,6 +2,7 @@ package dev.mateuszkowalczyk.ffm.app; import dev.mateuszkowalczyk.ffm.app.cache.CacheService; import dev.mateuszkowalczyk.ffm.data.DatabaseService; +import dev.mateuszkowalczyk.ffm.data.database.person.Person; import dev.mateuszkowalczyk.ffm.view.workspace.MainPageController; import dev.mateuszkowalczyk.ffm.view.workspace.elements.ImageContainerController; import javafx.application.Platform; @@ -31,10 +32,12 @@ public class WorkspaceService { this.mainPageController = mainPageController; } - public void loadImages() { + public void loadImages(Person person) { if (imagesContainerController != null) { Platform.runLater(() -> {this.imagesContainerController.clearImages();}); - var t = new Thread(WorkspaceWrapper.getInstance()); + var workspaceWrapper = WorkspaceWrapper.getInstance(); + workspaceWrapper.setPerson(person); + var t = new Thread(workspaceWrapper); t.start(); } else { System.out.println("Cannot load images if imagesContainerController isn't exists"); diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/app/WorkspaceWrapper.java b/src/main/java/dev/mateuszkowalczyk/ffm/app/WorkspaceWrapper.java index 0d0c463..dd04590 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/app/WorkspaceWrapper.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/app/WorkspaceWrapper.java @@ -1,6 +1,7 @@ package dev.mateuszkowalczyk.ffm.app; import dev.mateuszkowalczyk.ffm.app.cache.ThumbnailCacheService; +import dev.mateuszkowalczyk.ffm.data.database.person.Person; import dev.mateuszkowalczyk.ffm.data.database.photo.Photo; import dev.mateuszkowalczyk.ffm.data.database.photo.PhotoDAO; import javafx.scene.image.Image; @@ -14,6 +15,7 @@ public class WorkspaceWrapper implements Runnable { private ThumbnailCacheService thumbnailCacheService = ThumbnailCacheService.getInstance(); private WorkspaceService workspaceService = WorkspaceService.getInstance(); private Thread directoryScannerThread; + private Person person; private WorkspaceWrapper () {} @@ -32,7 +34,12 @@ public class WorkspaceWrapper implements Runnable { } private void setFromDatabase() { - List photoList = this.photoDAO.getAll(); + List photoList; + if (this.person == null) { + photoList = this.photoDAO.getAll(); + } else { + photoList = this.photoDAO.getAllForPerson(person); + } photoList.forEach(photo -> { var element = this.createImageViewElement(photo); @@ -48,4 +55,7 @@ public class WorkspaceWrapper implements Runnable { } + public void setPerson(Person person) { + this.person = person; + } } diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/data/database/photo/PhotoDAO.java b/src/main/java/dev/mateuszkowalczyk/ffm/data/database/photo/PhotoDAO.java index d3d8e18..f954cd4 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/data/database/photo/PhotoDAO.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/data/database/photo/PhotoDAO.java @@ -2,6 +2,7 @@ package dev.mateuszkowalczyk.ffm.data.database.photo; import dev.mateuszkowalczyk.ffm.data.DatabaseService; import dev.mateuszkowalczyk.ffm.data.database.Dao; +import dev.mateuszkowalczyk.ffm.data.database.person.Person; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -124,4 +125,26 @@ public class PhotoDAO implements Dao { e.printStackTrace(); } } + + public List getAllForPerson(Person person) { + List photoListForPerson = new ArrayList<>(); + + String sql = "SELECT * FROM photos p inner join face f on p.id == f.photoId WHERE f.personId = ?"; + + try { + PreparedStatement preparedStatement = this.databaseService.getConnection().prepareStatement(sql); + preparedStatement.setLong(1, person.getId()); + ResultSet resultSet = preparedStatement.executeQuery(); + + while (resultSet.next()) { + var photo = new Photo(resultSet); + + photoListForPerson.add(photo); + } + } catch (SQLException e) { + e.printStackTrace(); + } + + return photoListForPerson; + } } diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/MainPageController.java b/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/MainPageController.java index 38cb9d3..5a2ed39 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/MainPageController.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/MainPageController.java @@ -23,6 +23,7 @@ public class MainPageController implements Initializable { @FXML private ScrollPane mainContainer; private Person selectedPerson; + private Person person; public MainPageController() { this.workspaceService = WorkspaceService.getInstance(); @@ -39,6 +40,9 @@ public class MainPageController implements Initializable { Object controller = null; FXMLLoader fxmlLoader = new FXMLLoader(); switch (element) { + case ImagesContainerForPerson: + controller = new ImageContainerController(this, this.person); + break; case ImagesContainer: controller = new ImageContainerController(this); break; @@ -69,4 +73,9 @@ public class MainPageController implements Initializable { this.selectedPerson = person; this.setElement(ElementsEnum.PersonFaceContainer); } + + public void showPhotosForPerson(Person person) { + this.person = person; + this.setElement(ElementsEnum.ImagesContainerForPerson); + } } diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/ElementsEnum.java b/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/ElementsEnum.java index 7d64136..b9ec51c 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/ElementsEnum.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/ElementsEnum.java @@ -2,6 +2,7 @@ package dev.mateuszkowalczyk.ffm.view.workspace.elements; public enum ElementsEnum { ImagesContainer("templates/workspace/elements/image_container.fxml"), + ImagesContainerForPerson("templates/workspace/elements/image_container.fxml"), PeopleContainer("templates/workspace/elements/people_container.fxml"), PersonFaceContainer("templates/workspace/elements/face_container.fxml"); diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/FaceContainerController.java b/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/FaceContainerController.java index 6d7a106..dc6a501 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/FaceContainerController.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/FaceContainerController.java @@ -47,6 +47,10 @@ public class FaceContainerController implements Initializable { PersonDAO.getInstance().update(person); } + public void showPhotosForPerson(Event event) { + this.mainPageController.showPhotosForPerson(this.person); + } + public void refresh() { this.facesContainer.getChildren().clear(); try { diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/ImageContainerController.java b/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/ImageContainerController.java index 17f4fcd..1ee8108 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/ImageContainerController.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/ImageContainerController.java @@ -1,6 +1,7 @@ package dev.mateuszkowalczyk.ffm.view.workspace.elements; import dev.mateuszkowalczyk.ffm.app.WorkspaceService; +import dev.mateuszkowalczyk.ffm.data.database.person.Person; import dev.mateuszkowalczyk.ffm.data.database.photo.PhotoDAO; import dev.mateuszkowalczyk.ffm.view.workspace.MainPageController; import javafx.event.Event; @@ -17,13 +18,20 @@ public class ImageContainerController implements Initializable { @FXML private FlowPane imagesContainer; + private Person person; - public ImageContainerController(MainPageController mainPageController) { } + public ImageContainerController(MainPageController mainPageController) { + this.person = null; + } + + public ImageContainerController(MainPageController mainPageController, Person person) { + this.person = person; + } @Override public void initialize(URL url, ResourceBundle resourceBundle) { workspaceService.setImagesContainerController(this); - workspaceService.loadImages(); + workspaceService.loadImages(this.person); } public void clearImages() { @@ -34,7 +42,7 @@ public class ImageContainerController implements Initializable { public void forceRefresh(Event event) { PhotoDAO.getInstance().getAll(true); - this.workspaceService.loadImages(); + this.workspaceService.loadImages(this.person); } public void addImage(ImageView imageView) { diff --git a/src/main/resources/templates/workspace/elements/face_container.fxml b/src/main/resources/templates/workspace/elements/face_container.fxml index 74dff30..a773664 100644 --- a/src/main/resources/templates/workspace/elements/face_container.fxml +++ b/src/main/resources/templates/workspace/elements/face_container.fxml @@ -14,7 +14,8 @@ -