Skip to content
Snippets Groups Projects
Commit cba048bd authored by Mads Lundegaard's avatar Mads Lundegaard
Browse files

Merge branch 'namedquery_search' into 'dev'

Namedquery search

See merge request !92
parents 862f0dec f76df88f
No related branches found
No related tags found
2 merge requests!165Weekly merge to Master,!92Namedquery search
Pipeline #79132 passed
package NTNU.IDATT1002.controllers;
import NTNU.IDATT1002.App;
import NTNU.IDATT1002.models.Image;
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;
......@@ -10,7 +15,6 @@ import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
......@@ -19,10 +23,17 @@ import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javax.persistence.*;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaDelete;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.CriteriaUpdate;
import javax.persistence.metamodel.Metamodel;
import java.io.IOException;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.stream.Collectors;
......@@ -48,6 +59,7 @@ public class Search implements Initializable {
public VBox vBox;
/**
* Method that writes the word that is searched for.
* Also generates HBoxes with image title, tags...
......@@ -55,28 +67,30 @@ public class Search implements Initializable {
* @param resources
*/
public void initialize(URL location, ResourceBundle resources) {
if (!App.ex.getSearchField().isEmpty()){
if (!App.ex.getSearchField().isEmpty()){
search_result.setText(App.ex.getSearchField());
}
List<String> urls = Arrays.asList("@../../Images/placeholder-1920x1080.png", "@../../Images/party.jpg", "@../../Images/placeholderLogo.png", "@../../Images/placeholder-1920x1080.png", "@../../Images/placeholder-1920x1080.png");
for(int i = 0; i < urls.size(); i++) {
HBox h = new HBox();
h.setPrefHeight(300);
h.setPrefWidth(1920);
h.setAlignment(Pos.CENTER);
h.setStyle("-fx-background-color: #999999;");
Pane p = new Pane();
p.setPrefWidth(1400);
p.setPrefHeight(300);
ImageView iV = new ImageView();
iV.setImage(new Image(urls.get(i)));
iV.setFitHeight(300);
iV.setFitWidth(500);
iV.pickOnBoundsProperty().setValue(true);
iV.setPreserveRatio(true);
iV.setOnMouseClicked(new EventHandler<MouseEvent>() {
List<NTNU.IDATT1002.models.Image> images = new ImageService(App.ex.getEntityManager()).searchResult(App.ex.getSearchField());
for(int i = 0; i < images.size(); i++) {
HBox hBox = new HBox();
hBox.setPrefHeight(300);
hBox.setPrefWidth(1920);
hBox.setAlignment(Pos.CENTER);
hBox.setStyle("-fx-background-color: #999999;");
Pane pane = new Pane();
pane.setPrefWidth(1400);
pane.setPrefHeight(300);
ImageView imageView = new ImageView();
imageView.setImage(ImageUtil.convertToFXImage(images.get(i)));
imageView.setFitHeight(300);
imageView.setFitWidth(500);
imageView.pickOnBoundsProperty().setValue(true);
imageView.setPreserveRatio(true);
imageView.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent e) {
try{
switchToPicture(e);
......@@ -89,31 +103,53 @@ public class Search implements Initializable {
Text title = setText("TITLE:", 550, 66, 153, "System Bold", 48);
Text tag = setText("TAG:", 550, 97, 70, "System Bold", 24);
Text desc = setText("DESCRIPTION:", 550, 126, 129, "System Bold", 18);
Text title_Field = setText(urls.get(i), 700, 66, "System Bold", 48);
Text tag_Field = setText("####", 700, 97, "System Bold", 24);
Text desc_Field = setText("####", 700, 126, "System Bold", 18);
p.getChildren().addAll(iV, title, tag, desc, title_Field, tag_Field, desc_Field);
h.getChildren().add(p);
vBox.getChildren().add(h);
Text title_Field = setText("SKAL BILDENE HA TITTEL?", 700, 66, "System Bold", 48);
String tagsString = TagService.getTagsAsString(images.get(i).getTags());
Text tag_Field = setText(tagsString, 700, 97, "System Bold", 24);
Text metadata_Field = setText(images.get(i).getMetadata().toString(), 700, 126, "System Bold", 18);
pane.getChildren().addAll(imageView, title, tag, desc, title_Field, tag_Field, metadata_Field);
hBox.getChildren().add(pane);
vBox.getChildren().add(hBox);
}
}
public Text setText(String text, int layoutX, int layoutY, double wrappingWidth, String fontName, double fontSize){
Text t = new Text(text);
t.setLayoutX(layoutX);
t.setLayoutY(layoutY);
t.setWrappingWidth(wrappingWidth);
t.setFont(Font.font(fontName, fontSize));
return t;
/**
* Method that takes in a string of text and returns a text object
* @param textIn
* @param layoutX
* @param layoutY
* @param wrappingWidth
* @param fontName
* @param fontSize
* @return
*/
public Text setText(String textIn, int layoutX, int layoutY, double wrappingWidth, String fontName, double fontSize){
Text text = new Text(textIn);
text.setLayoutX(layoutX);
text.setLayoutY(layoutY);
text.setWrappingWidth(wrappingWidth);
text.setFont(Font.font(fontName, fontSize));
return text;
}
public Text setText(String text, int layoutX, int layoutY, String fontName, double fontSize){
Text t = new Text(text);
t.setLayoutX(layoutX);
t.setLayoutY(layoutY);
t.setFont(Font.font(fontName, fontSize));
return t;
/**
* Alternative setText method without wrappingWidth
* @param textIn
* @param layoutX
* @param layoutY
* @param fontName
* @param fontSize
* @return
*/
public Text setText(String textIn, int layoutX, int layoutY, String fontName, double fontSize){
Text text = new Text(textIn);
text.setLayoutX(layoutX);
text.setLayoutY(layoutY);
text.setFont(Font.font(fontName, fontSize));
return text;
}
/**
......
......@@ -22,7 +22,13 @@ import java.util.stream.Collectors;
@Table(name = "album")
@NamedQueries({
@NamedQuery(name="Album.findAllByUsername",
query = "SELECT ia from Album ia WHERE ia.user.username = :username")
query = "SELECT ia from Album ia WHERE ia.user.username = :username"),
@NamedQuery(name="Album.findByTags",
query = "SELECT ia from Album ia "
+ "join ia.tags tg "
+ "where tg.name = :name"),
@NamedQuery(name="Image.findByTitle",
query = "SELECT ia from Album ia WHERE ia.title = :title")
})
public class Album {
......
......@@ -17,7 +17,11 @@ import java.util.stream.Collectors;
@Table(name = "image")
@NamedQueries({
@NamedQuery(name="Image.findAllByUsername",
query = "SELECT ia from Image ia WHERE ia.user.username = :username")
query = "SELECT ia from Image ia WHERE ia.user.username = :username"),
@NamedQuery(name="Image.findByTags",
query = "SELECT im from Image im "
+ "join im.tags tg "
+ "where tg.name = :name")
})
public class Image {
......
package NTNU.IDATT1002.repository;
import NTNU.IDATT1002.App;
import NTNU.IDATT1002.models.Image;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import java.util.List;
......@@ -23,6 +25,7 @@ public class ImageRepository extends AbstractRepository<Image, Long> {
* Mapping to @NamedQuery 'find all albums by users username' defined in {@link Image}
*/
public static final String IMAGE_FIND_BY_USERNAME = "Image.findAllByUsername";
public static final String IMAGE_FIND_BY_TAG = "Image.findByTags";
/**
* Constructor to inject {@link EntityManager} dependency.
......@@ -45,6 +48,13 @@ public class ImageRepository extends AbstractRepository<Image, Long> {
.setParameter("username", username)
.getResultList();
}
public List<Image> findAllByTags(String tag){
return entityManager.createNamedQuery(IMAGE_FIND_BY_TAG, Image.class)
.setParameter("name",tag)
.getResultList();
}
}
......
......@@ -98,4 +98,30 @@ public class ImageService {
.collect(Collectors.toList());
}
/**
* 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
* @param query
* @return a list with no duplicate images
*/
public List<Image> searchResult(String query){
List<Image> allFound = new ArrayList<>();
List<Image> byTags = imageRepository.findAllByTags(query);
List<Image> byUsername = imageRepository.findAllByUsername(query);
allFound.addAll(byTags);
allFound.addAll(byUsername);
return removeDuplicates(allFound);
}
/**
* takes a list and removes all duplicate elements
* @param images
* @return list without duplicates
*/
public List<Image> removeDuplicates(List<Image> images){
return images.stream().distinct().collect(Collectors.toList());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment