diff --git a/src/main/java/NTNU/IDATT1002/controllers/DataExchange.java b/src/main/java/NTNU/IDATT1002/controllers/DataExchange.java index b8a4ff0408357033ee6c5ccc1a9f37096f88fb28..6a6c90cc615c63f2e46145da7d90dc0fd1266148 100644 --- a/src/main/java/NTNU/IDATT1002/controllers/DataExchange.java +++ b/src/main/java/NTNU/IDATT1002/controllers/DataExchange.java @@ -19,7 +19,7 @@ public class DataExchange { private String searchField; private List<File> uploadedFiles; private Long chosenAlbumId; - private String chosenImg; + private Long chosenImg; public DataExchange(){ searchField = ""; @@ -45,7 +45,7 @@ public class DataExchange { return chosenAlbumId; } - public String getChosenImg() { + public Long getChosenImg() { return chosenImg; } @@ -69,7 +69,7 @@ public class DataExchange { this.chosenAlbumId = chosenAlbumId; } - public void setChosenImg(String chosenImg) { + public void setChosenImg(Long chosenImg) { this.chosenImg = chosenImg; } diff --git a/src/main/java/NTNU/IDATT1002/controllers/Explore.java b/src/main/java/NTNU/IDATT1002/controllers/Explore.java index e9f7a47b102f13b9f089c465eba6489a5cc609a2..6f0e8987e557aab6abb8b2ea567b44563372f00b 100644 --- a/src/main/java/NTNU/IDATT1002/controllers/Explore.java +++ b/src/main/java/NTNU/IDATT1002/controllers/Explore.java @@ -1,10 +1,15 @@ package NTNU.IDATT1002.controllers; import NTNU.IDATT1002.App; +import NTNU.IDATT1002.models.Tag; +import NTNU.IDATT1002.service.ImageService; +import NTNU.IDATT1002.service.TagService; +import NTNU.IDATT1002.utils.ImageUtil; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.Initializable; import javafx.geometry.Pos; +import javafx.scene.Node; import javafx.scene.control.Button; import javafx.scene.control.ScrollPane; import javafx.scene.control.TextField; @@ -21,6 +26,7 @@ import java.net.URL; import java.util.Arrays; import java.util.List; import java.util.ResourceBundle; +import java.util.stream.Collectors; /** * Controls the buttons and changeable elements on explore.fxml, @@ -50,30 +56,31 @@ public class Explore implements Initializable { */ @Override public void initialize(URL url, ResourceBundle resourceBundle) { - List<String> urls = Arrays.asList("@../../Images/placeholder-1920x1080.png", "@../../Images/party.jpg", "@../../Images/placeholderLogo.png", "@../../Images/party.jpg","@../../Images/placeholder-1920x1080.png", "@../../Images/placeholderLogo.png", "@../../Images/placeholder-1920x1080.png", "@../../Images/placeholderLogo.png", "@../../Images/party.jpg", "@../../Images/placeholderLogo.png", "@../../Images/party.jpg","@../../Images/placeholder-1920x1080.png", "@../../Images/placeholderLogo.png", "@../../Images/placeholder-1920x1080.png", "@../../Images/party.jpg"); + List<NTNU.IDATT1002.models.Image> images = new ImageService(App.ex.getEntityManager()).getAllImages(); //Limited elements to 15 since grid pane since is 3x15 //Can implement automatic row adding when this limit exceeded later - for(int i = 0; i < urls.size() && i < 15; i++) { + for(int i = 0; i < images.size() && i < 15; i++) { //Row and column in gripdane int column = i%3; int row = (i-column)/3; //Make vbox container for content - VBox v = new VBox(); - v.setPrefHeight(400); - v.setPrefWidth(400); - v.setAlignment(Pos.TOP_LEFT); - //v.setStyle("-fx-background-color: #999999;"); + VBox vBox = new VBox(); + vBox.setPrefHeight(400); + vBox.setPrefWidth(400); + vBox.setAlignment(Pos.CENTER); + //vBox.setStyle("-fx-background-color: #999999;"); //Image container - ImageView iV = new ImageView(); - iV.setImage(new Image(urls.get(i))); - iV.setFitHeight(250); - iV.setFitWidth(400); - iV.pickOnBoundsProperty().setValue(true); - iV.setPreserveRatio(true); + ImageView imageView = new ImageView(); + imageView.setId(String.valueOf(images.get(i).getId())); + imageView.setImage(ImageUtil.convertToFXImage(images.get(i))); + imageView.setFitHeight(250); + imageView.setFitWidth(400); + imageView.pickOnBoundsProperty().setValue(true); + imageView.setPreserveRatio(true); //Link to view image page - iV.setOnMouseClicked(new EventHandler<MouseEvent>() { + imageView.setOnMouseClicked(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent e) { try{ switchToPicture(e); @@ -86,14 +93,15 @@ public class Explore implements Initializable { //Text describing the picture's title and tag Text title = new Text("TITLE:"); title.setFont(Font.font("System Bold", 24)); - Text tag = new Text("#TAGS"); + String tagsAsString = TagService.getTagsAsString(images.get(i).getTags()); + Text tag = new Text("TAGS:\n " + tagsAsString); tag.setFont(Font.font("System Bold", 18)); //Add elements to vbox - v.getChildren().addAll(iV, title, tag); + vBox.getChildren().addAll(imageView, title, tag); //Add vbox to gridpane - gridPane.add(v, column, row); + gridPane.add(vBox, column, row); } } @@ -161,8 +169,14 @@ public class Explore implements Initializable { * @throws IOException */ public void switchToPicture(MouseEvent mouseEvent) throws IOException { - if(mouseEvent.getSource() instanceof ImageView){ - App.ex.setChosenImg(((ImageView) mouseEvent.getSource()).getImage().getUrl()); + long imageId = 0; + Node node = (Node) mouseEvent.getSource(); + if (node.getId() != null){ + imageId = Long.parseLong(node.getId()); + } + + if (imageId != 0) { + App.ex.setChosenImg(imageId); App.setRoot("view_picture"); } } diff --git a/src/main/java/NTNU/IDATT1002/controllers/Search.java b/src/main/java/NTNU/IDATT1002/controllers/Search.java index edcf4974307c7d16ca7177b0eb7e9a0528f55fe3..c64c9813dc5c2e2a789564a0ec7237576aabb432 100644 --- a/src/main/java/NTNU/IDATT1002/controllers/Search.java +++ b/src/main/java/NTNU/IDATT1002/controllers/Search.java @@ -85,6 +85,7 @@ public class Search implements Initializable { pane.setPrefHeight(300); ImageView imageView = new ImageView(); + imageView.setId(String.valueOf(images.get(i).getId())); imageView.setImage(ImageUtil.convertToFXImage(images.get(i))); imageView.setFitHeight(300); imageView.setFitWidth(500); @@ -234,9 +235,15 @@ public class Search implements Initializable { * @throws IOException */ public void switchToPicture(MouseEvent mouseEvent) throws IOException { - if(mouseEvent.getSource() instanceof ImageView){ - App.ex.setChosenImg(((ImageView) mouseEvent.getSource()).getImage().getUrl()); - App.setRoot("view_picture"); + long imageId = 0; + Node node = (Node) mouseEvent.getSource(); + if (node.getId() != null){ + imageId = Long.parseLong(node.getId()); + } + + if (imageId != 0) { + App.ex.setChosenImg(imageId); + App.setRoot("view_image"); } } } diff --git a/src/main/java/NTNU/IDATT1002/controllers/ViewPicture.java b/src/main/java/NTNU/IDATT1002/controllers/ViewPicture.java index d13613a22510c6cbf0451ff51d9108fb013f5633..47f300f6a1b8becf031e675622238338a742ddd9 100644 --- a/src/main/java/NTNU/IDATT1002/controllers/ViewPicture.java +++ b/src/main/java/NTNU/IDATT1002/controllers/ViewPicture.java @@ -1,6 +1,8 @@ package NTNU.IDATT1002.controllers; import NTNU.IDATT1002.App; +import NTNU.IDATT1002.service.ImageService; +import NTNU.IDATT1002.utils.ImageUtil; import javafx.event.ActionEvent; import javafx.fxml.Initializable; import javafx.scene.control.Button; @@ -11,8 +13,10 @@ import javafx.scene.input.MouseEvent; import javafx.scene.layout.Pane; import javafx.scene.text.Text; +import javax.persistence.EntityManager; import java.io.IOException; import java.net.URL; +import java.util.Optional; import java.util.ResourceBundle; @@ -34,10 +38,18 @@ public class ViewPicture implements Initializable{ public Pane metadata_pane; public Button tbar_searchBtn; public Button tbar_albums; + private ImageService imageService; @Override public void initialize(URL url, ResourceBundle resourceBundle) { - picture.setImage(new Image(App.ex.getChosenImg())); + EntityManager entityManager = App.ex.getEntityManager(); + imageService = new ImageService(entityManager); + Long currentImageId = App.ex.getChosenImg(); + NTNU.IDATT1002.models.Image foundImage = imageService.findById(currentImageId).get(); + Image image = ImageUtil.convertToFXImage(foundImage); + + picture.setImage(image); + } /** diff --git a/src/main/java/NTNU/IDATT1002/repository/ImageRepository.java b/src/main/java/NTNU/IDATT1002/repository/ImageRepository.java index 857ab938b69df531317aa45c85e663e1abd10cad..07b854f64d616575c3cc2ddfe55e3db7979144ec 100644 --- a/src/main/java/NTNU/IDATT1002/repository/ImageRepository.java +++ b/src/main/java/NTNU/IDATT1002/repository/ImageRepository.java @@ -37,6 +37,7 @@ public class ImageRepository extends AbstractRepository<Image, Long> { setEntityClass(Image.class); } + /** * Retrieves all albums of the user with the given username. * diff --git a/src/main/java/NTNU/IDATT1002/service/ImageService.java b/src/main/java/NTNU/IDATT1002/service/ImageService.java index b9446aa5acc08393c012b66100158f374577faeb..1708cac27357868341347cbc92f2a541bb580854 100644 --- a/src/main/java/NTNU/IDATT1002/service/ImageService.java +++ b/src/main/java/NTNU/IDATT1002/service/ImageService.java @@ -101,6 +101,10 @@ public class ImageService { .collect(Collectors.toList()); } + public Optional<Image> findById(Long id){ + return imageRepository.findById(id); + } + /** * Searches images by tags and username, and merges the two list into one with all images * uses removeDuplicates list to return a list with no duplicate images @@ -116,7 +120,7 @@ public class ImageService { allFound.addAll(byUsername); return removeDuplicates(allFound); } - + /** * takes a list and removes all duplicate elements @@ -127,4 +131,7 @@ public class ImageService { public List<Image> removeDuplicates(List<Image> images){ return images.stream().distinct().collect(Collectors.toList()); } + + + }