From 73a921e175c8b8ef4a2aba3b2d5e2e9855b60ce4 Mon Sep 17 00:00:00 2001 From: Mateusz Kowalczyk Date: Fri, 31 Jan 2020 22:38:26 +0100 Subject: [PATCH] add change face to another person --- .../ffm/app/DirectoryScanner.java | 27 ++++++++-- .../ffm/app/face/FaceWorkspace.java | 7 ++- .../ffm/data/database/face/FaceDAO.java | 11 ++++ .../ffm/data/database/person/PersonDAO.java | 13 +++++ .../ffm/image/FaceRecognition.java | 4 +- .../ffm/image/ThumbnailService.java | 4 +- .../elements/FaceContainerController.java | 13 ++++- .../elements/FacePaneController.java | 50 +++++++++++++++++++ .../workspace/elements/face_container.fxml | 19 ++++++- .../workspace/elements/face_pane.fxml | 7 ++- 10 files changed, 142 insertions(+), 13 deletions(-) diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/app/DirectoryScanner.java b/src/main/java/dev/mateuszkowalczyk/ffm/app/DirectoryScanner.java index 1c1a7b4..e677918 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/app/DirectoryScanner.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/app/DirectoryScanner.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.List; public class DirectoryScanner implements Runnable { private WorkspaceService workspaceService = WorkspaceService.getInstance(); @@ -82,11 +83,29 @@ public class DirectoryScanner implements Runnable { } private boolean isImagePath(String filename) { - switch (filename.substring(filename.length() - 3).toLowerCase()) { - case "jpg": + List whiteListExtension = new ArrayList(); + whiteListExtension.add("jpg"); + whiteListExtension.add("jpeg"); + whiteListExtension.add("png"); + + for (String extension: whiteListExtension) { + var fileExtension = filename.substring(filename.length() - extension.length()); + + if (fileExtension.toLowerCase().equals(extension)){ return true; - default: - return false; + } } + + return false; + +// filename.endsWith("jpeg"); +// +// switch (filename.substring(filename.length() - 3).toLowerCase()) { +// case "jpeg": +// case "jpg": +// return true; +// default: +// return false; +// } } } diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/app/face/FaceWorkspace.java b/src/main/java/dev/mateuszkowalczyk/ffm/app/face/FaceWorkspace.java index 2d93efc..c04ff9d 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/app/face/FaceWorkspace.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/app/face/FaceWorkspace.java @@ -4,8 +4,10 @@ import dev.mateuszkowalczyk.ffm.app.exception.NotFoundException; import dev.mateuszkowalczyk.ffm.data.database.face.Face; import dev.mateuszkowalczyk.ffm.data.database.face.FaceDAO; import dev.mateuszkowalczyk.ffm.data.database.person.Person; +import dev.mateuszkowalczyk.ffm.data.database.person.PersonDAO; import dev.mateuszkowalczyk.ffm.utils.ResourceLoader; import dev.mateuszkowalczyk.ffm.view.workspace.MainPageController; +import dev.mateuszkowalczyk.ffm.view.workspace.elements.ElementsEnum; import dev.mateuszkowalczyk.ffm.view.workspace.elements.FaceContainerController; import dev.mateuszkowalczyk.ffm.view.workspace.elements.FacePaneController; import javafx.fxml.FXMLLoader; @@ -22,6 +24,7 @@ public class FaceWorkspace { public void loadFacesForPerson(MainPageController mainPageController, FaceContainerController faceContainerController, Person person) throws NotFoundException { List faceList = FaceDAO.getInstance().getAllForPerson(person); + List personList = PersonDAO.getInstance().getAll(true); var resourceLoader = ResourceLoader.getInstance(); if (faceList.size() == 0) { @@ -31,7 +34,9 @@ public class FaceWorkspace { for (Face face : faceList) { FXMLLoader fxmlLoader = new FXMLLoader(); fxmlLoader.setLocation(resourceLoader.getResource("templates/workspace/elements/face_pane.fxml")); - fxmlLoader.setController(new FacePaneController(mainPageController, faceContainerController, face)); + var controller = new FacePaneController(mainPageController, faceContainerController, face); + controller.setPersonList(personList); + fxmlLoader.setController(controller); try { faceContainerController.addFacePane(fxmlLoader.load()); diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/data/database/face/FaceDAO.java b/src/main/java/dev/mateuszkowalczyk/ffm/data/database/face/FaceDAO.java index 6a609e2..136a9fa 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/data/database/face/FaceDAO.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/data/database/face/FaceDAO.java @@ -89,7 +89,18 @@ public class FaceDAO implements Dao { @Override public void update(Face face) { + String sql = "UPDATE face set personId = ? WHERE id = ?"; + try { + PreparedStatement preparedStatement = this.databaseService.getConnection().prepareStatement(sql); + preparedStatement.setLong(1, face.getPersonId()); + preparedStatement.setLong(2, face.getId()); + + preparedStatement.executeUpdate(); + this.getAll(true); + } catch (SQLException e) { + e.printStackTrace(); + } } @Override diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/data/database/person/PersonDAO.java b/src/main/java/dev/mateuszkowalczyk/ffm/data/database/person/PersonDAO.java index 0c0adda..0f9fcc6 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/data/database/person/PersonDAO.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/data/database/person/PersonDAO.java @@ -82,7 +82,20 @@ public class PersonDAO implements Dao { @Override public void update(Person person) { + String sql = "UPDATE persons SET name = ? WHERE id = ?"; + try { + PreparedStatement preparedStatement = this.databaseService.getConnection().prepareStatement(sql); + preparedStatement.setString(1, person.getName()); + preparedStatement.setLong(2, person.getId()); + + preparedStatement.executeUpdate(); + + this.getAll(true); + + } catch (SQLException e) { + e.printStackTrace(); + } } @Override diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/image/FaceRecognition.java b/src/main/java/dev/mateuszkowalczyk/ffm/image/FaceRecognition.java index 8216fbe..557cce5 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/image/FaceRecognition.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/image/FaceRecognition.java @@ -16,8 +16,8 @@ public class FaceRecognition { private FaceDAO faceDAO = FaceDAO.getInstance(); public void recognize(Face faceToRecognize) { - List faceList = faceDAO.getAll(); - List personList = personDAO.getAll(); + List faceList = faceDAO.getAll(true); + List personList = personDAO.getAll(true); ArrayList facesImages = new ArrayList<>(); ArrayList faceImagesIndex = new ArrayList<>(); Person person; diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/image/ThumbnailService.java b/src/main/java/dev/mateuszkowalczyk/ffm/image/ThumbnailService.java index 6657682..d5c6723 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/image/ThumbnailService.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/image/ThumbnailService.java @@ -22,9 +22,9 @@ public class ThumbnailService { float divider; if (originalImage.getWidth() > originalImage.getHeight()) { - divider = originalImage.getWidth() / 200; + divider = (float) originalImage.getWidth() / (float) 200; } else { - divider = originalImage.getHeight() / 200; + divider = (float) originalImage.getHeight() / (float) 200; } int width = (int) (originalImage.getWidth() / divider); 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 7912fab..6d7a106 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 @@ -2,13 +2,14 @@ package dev.mateuszkowalczyk.ffm.view.workspace.elements; import dev.mateuszkowalczyk.ffm.app.exception.NotFoundException; import dev.mateuszkowalczyk.ffm.app.face.FaceWorkspace; -import dev.mateuszkowalczyk.ffm.data.database.face.FaceDAO; import dev.mateuszkowalczyk.ffm.data.database.person.Person; import dev.mateuszkowalczyk.ffm.data.database.person.PersonDAO; import dev.mateuszkowalczyk.ffm.view.workspace.MainPageController; +import javafx.event.Event; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.Node; +import javafx.scene.control.TextField; import javafx.scene.layout.FlowPane; import java.net.URL; @@ -21,6 +22,9 @@ public class FaceContainerController implements Initializable { @FXML private FlowPane facesContainer; + @FXML + private TextField personName; + public FaceContainerController(MainPageController mainPageController, Person person) { this.mainPageController = mainPageController; this.person = person; @@ -34,6 +38,13 @@ public class FaceContainerController implements Initializable { @Override public void initialize(URL url, ResourceBundle resourceBundle) { this.refresh(); + this.personName.setText(person.getName()); + } + + public void updatePersonName(Event event) { + this.person.setName(this.personName.getText()); + + PersonDAO.getInstance().update(person); } public void refresh() { diff --git a/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/FacePaneController.java b/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/FacePaneController.java index 8af581b..8d48242 100644 --- a/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/FacePaneController.java +++ b/src/main/java/dev/mateuszkowalczyk/ffm/view/workspace/elements/FacePaneController.java @@ -1,25 +1,41 @@ package dev.mateuszkowalczyk.ffm.view.workspace.elements; +import dev.mateuszkowalczyk.ffm.app.face.FaceWorkspace; import dev.mateuszkowalczyk.ffm.data.database.face.Face; import dev.mateuszkowalczyk.ffm.data.database.face.FaceDAO; +import dev.mateuszkowalczyk.ffm.data.database.person.Person; +import dev.mateuszkowalczyk.ffm.data.database.person.PersonDAO; import dev.mateuszkowalczyk.ffm.view.workspace.MainPageController; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; import javafx.event.Event; import javafx.fxml.FXML; import javafx.fxml.Initializable; +import javafx.scene.control.ChoiceBox; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import java.net.URL; +import java.util.List; import java.util.ResourceBundle; public class FacePaneController implements Initializable { private MainPageController mainPageController; private FaceContainerController faceContainerController; + private FaceWorkspace faceWorkspace = FaceWorkspace.getInstance(); private Face face; + private ObservableList list = FXCollections.observableArrayList(); @FXML private ImageView faceImage; + @FXML + private ChoiceBox choicePerson; + + private List personList; + public FacePaneController(MainPageController mainPageController, FaceContainerController faceContainerController, Face face) { this.mainPageController = mainPageController; @@ -32,13 +48,47 @@ public class FacePaneController implements Initializable { this.faceContainerController.refresh(); } + public void markAsNewPerson(Event event) { + Person person = new Person(); + PersonDAO.getInstance().add(person); + + this.changePerson(person, this.face); + } + + private void changePerson(Person person, Face face) { + face.setPersonId(person.getId()); + FaceDAO.getInstance().update(face); + PersonDAO.getInstance().getAll(true); + + this.faceContainerController.refresh(); + } + @Override public void initialize(URL url, ResourceBundle resourceBundle) { this.loadFace(); + this.setChoiceBox(); + } + + private void setChoiceBox() { + for (Person person: this.personList) { + this.list.add(person.getName()); + } + + this.choicePerson.setItems(this.list); } private void loadFace() { Image image = new Image("file:" + this.face.getPath()); this.faceImage.setImage(image); } + + public void setPersonList(List personList) { + this.personList = personList; + } + + public void writePersonToFace(Event event) { + var selectedPerson = personList.get(list.indexOf(this.choicePerson.getValue())); + + this.changePerson(selectedPerson, this.face); + } } diff --git a/src/main/resources/templates/workspace/elements/face_container.fxml b/src/main/resources/templates/workspace/elements/face_container.fxml index 07e2216..74dff30 100644 --- a/src/main/resources/templates/workspace/elements/face_container.fxml +++ b/src/main/resources/templates/workspace/elements/face_container.fxml @@ -1,6 +1,21 @@ + + + + - - + +
+ +
+ + + + +