Skip to content
Snippets Groups Projects

Need valdig title at album

Merged Lars Brodin Østby requested to merge needValdigTitleAtAlbum into dev
1 unresolved thread
Files
2
@@ -24,7 +24,6 @@ import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import org.hibernate.boot.jaxb.internal.stax.HbmEventReader;
import javax.persistence.EntityManager;
import java.io.IOException;
@@ -38,159 +37,193 @@ import java.util.stream.Collectors;
/**
* Controls the buttons and changeable elements on create_album.fxml,
* a page where you create albums
*
* @version 1.0 22.03.2020
*/
public class CreateAlbum implements Initializable {
public TextField tbar_search;
public ImageView tbar_logo;
public Button tbar_explore;
public Button tbar_map;
public Button tbar_upload;
public TextField album_title_field;
public TextField album_tag_field;
public TextArea album_desc_field;
public Pane metadata_pane;
public GridPane image_grid;
public Button add_images_button;
public Button create_album_button;
public Button tbar_albums;
public Button tbar_searchBtn;
public VBox fileContainer;
private AlbumService albumService;
private ImageService imageService;
public CreateAlbum() {
EntityManager entityManager = App.ex.getEntityManager();
albumService = new AlbumService(entityManager);
imageService = new ImageService(entityManager);
public TextField tbar_search;
public ImageView tbar_logo;
public Button tbar_explore;
public Button tbar_map;
public Button tbar_upload;
public TextField album_title_field;
public TextField album_tag_field;
public TextArea album_desc_field;
public Pane metadata_pane;
public GridPane image_grid;
public Button add_images_button;
public Button create_album_button;
public Button tbar_albums;
public Button tbar_searchBtn;
public VBox fileContainer;
private AlbumService albumService;
private ImageService imageService;
public CreateAlbum() {
EntityManager entityManager = App.ex.getEntityManager();
albumService = new AlbumService(entityManager);
imageService = new ImageService(entityManager);
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
List<Image> allImages = imageService.getImageFromUser(ApplicationState.getCurrentUser());
for (Image image : allImages) {
javafx.scene.image.Image convertedImage = ImageUtil.convertToFXImage(image);
HBox container = new HBox();
container.setPrefWidth(450);
container.setAlignment(Pos.TOP_CENTER);
ImageView imageView = new ImageView();
imageView.setFitHeight(200);
imageView.setFitWidth(350);
imageView.setPickOnBounds(true);
imageView.setPreserveRatio(true);
imageView.setImage(convertedImage);
CheckBox checkBox = new CheckBox();
checkBox.setId(image.getId().toString());
container.getChildren().addAll(imageView, checkBox);
fileContainer.getChildren().add(container);
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
List<Image> allImages = imageService.getImageFromUser(ApplicationState.getCurrentUser());
for (Image image : allImages){
javafx.scene.image.Image convertedImage = ImageUtil.convertToFXImage(image);
HBox container = new HBox();
container.setPrefWidth(450);
container.setAlignment(Pos.TOP_CENTER);
ImageView imageView = new ImageView();
imageView.setFitHeight(200);
imageView.setFitWidth(350);
imageView.setPickOnBounds(true);
imageView.setPreserveRatio(true);
imageView.setImage(convertedImage);
CheckBox checkBox = new CheckBox();
checkBox.setId(image.getId().toString());
container.getChildren().addAll(imageView, checkBox);
fileContainer.getChildren().add(container);
}
}
/**
* Method that changes stage to Main page
* @param mouseEvent
* @throws IOException
*/
public void switchToMain(MouseEvent mouseEvent) throws IOException {
App.setRoot("main");
}
/**
* Method that changes stage to Main page
*
* @param mouseEvent
* @throws IOException
*/
public void switchToMain(MouseEvent mouseEvent) throws IOException {
App.setRoot("main");
}
/**
* Method that changes stage to Search page. It reads the value of the search
* field and if not empty it is passed to dataexchange
*
* @param actionEvent
* @throws IOException
*/
public void switchToSearch(ActionEvent actionEvent) throws IOException {
if (!tbar_search.getText().isEmpty()) {
App.ex.setSearchField(tbar_search.getText());
}
/**
* Method that changes stage to Search page. It reads the value of the search
* field and if not empty it is passed to dataexchange
* @param actionEvent
* @throws IOException
*/
public void switchToSearch(ActionEvent actionEvent) throws IOException {
if (!tbar_search.getText().isEmpty()){
App.ex.setSearchField(tbar_search.getText());
}
App.setRoot("search");
App.setRoot("search");
}
/**
* Method that changes stage to Explore page
*
* @param actionEvent
* @throws IOException
*/
public void switchToExplore(ActionEvent actionEvent) throws IOException {
App.setRoot("explore");
}
/**
* Method that changes stage to Albums page
*
* @param actionEvent
* @throws IOException
*/
public void switchToAlbums(ActionEvent actionEvent) throws IOException {
App.setRoot("explore_albums");
}
/**
* Method that changes stage to Map page
*
* @param actionEvent
* @throws IOException
*/
public void switchToMap(ActionEvent actionEvent) throws IOException {
App.setRoot("map");
}
/**
* Method that changes stage to Upload page
*
* @param actionEvent the mouse has done something
* @throws IOException this page does not exist
*/
public void switchToUpload(ActionEvent actionEvent) throws IOException {
App.setRoot("upload");
}
/**
* Method that creates album based on the user input and checked images
*
* @param actionEvent
*/
public void createAlbum(ActionEvent actionEvent) {
String title = album_title_field.getText();
String description = album_desc_field.getText();
String tags = album_tag_field.getText();
if (tags.isEmpty()){ tags = " "; }
List<Tag> tagsToAdd = TagService.getTagsFromString(tags);
User user = ApplicationState.getCurrentUser();
//temporary solution for the toString problem with album log creation, along with the if(tag) above
if (description.isEmpty()) {
description = "No desripton added";
}
List<Node> imageContainers = new ArrayList<>(fileContainer.getChildren());
List<String> checkedImagesId = new ArrayList<>();
//Each image and checkbox has an hbox container
imageContainers.forEach(hbox ->
((HBox) hbox).getChildren().stream()
//Filter children that is a checked checkbox
.filter(child -> child instanceof CheckBox && ((CheckBox) child).isSelected())
//Adds all checked image id
.forEach(checked -> checkedImagesId.add(checked.getId()))
);
if (validateInpid()) {
//Find the users images and makes a filter on the checked images
List<Image> albumImages = imageService.getImageFromUser(user).stream().filter(image -> checkedImagesId.contains(image.getId().toString())).collect(Collectors.toList());
if (albumImages.size() > 0) {
Optional<Album> createdAlbum = albumService.createAlbum(title, description, user, tagsToAdd, albumImages);
createdAlbum.ifPresent(album -> {
App.ex.setChosenAlbumId(album.getId());
try {
App.setRoot("view_album");
} catch (IOException e) {
e.printStackTrace();
}
});
} else {
Optional<Album> createdAlbum = albumService.createEmptyAlbum(title, description, user, tagsToAdd);
createdAlbum.ifPresent(album -> {
App.ex.setChosenAlbumId(album.getId());
try {
App.setRoot("view_album");
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
/**
* Method that changes stage to Explore page
* @param actionEvent
* @throws IOException
*/
public void switchToExplore(ActionEvent actionEvent) throws IOException {
App.setRoot("explore");
}
/**
* Method that changes stage to Albums page
* @param actionEvent
* @throws IOException
*/
public void switchToAlbums(ActionEvent actionEvent) throws IOException {
App.setRoot("explore_albums");
}
/**
* Method that changes stage to Map page
* @param actionEvent
* @throws IOException
*/
public void switchToMap(ActionEvent actionEvent) throws IOException {
App.setRoot("map");
}
/**
* Method that changes stage to Upload page
* @param actionEvent the mouse has done something
* @throws IOException this page does not exist
*/
public void switchToUpload(ActionEvent actionEvent) throws IOException {
App.setRoot("upload");
}
/**
* Method that creates album based on the user input and checked images
* @param actionEvent
*/
public void createAlbum(ActionEvent actionEvent){
String title = album_title_field.getText();
String description = album_desc_field.getText();
String tags = album_tag_field.getText();
List<Tag> tagsToAdd = TagService.getTagsFromString(tags);
User user = ApplicationState.getCurrentUser();
List<Node> imageContainers = new ArrayList<>(fileContainer.getChildren());
List<String> checkedImagesId = new ArrayList<>();
//Each image and checkbox has an hbox container
imageContainers.forEach(hbox ->
((HBox) hbox).getChildren().stream()
//Filter children that is a checked checkbox
.filter(child -> child instanceof CheckBox && ((CheckBox) child).isSelected())
//Adds all checked image id
.forEach(checked -> checkedImagesId.add(checked.getId()))
);
//Find the users images and makes a filter on the checked images
List<Image> albumImages = imageService.getImageFromUser(user).stream().filter(image -> checkedImagesId.contains(image.getId().toString())).collect(Collectors.toList());
if (albumImages.size() > 0){
Optional<Album> createdAlbum = albumService.createAlbum(title, description, user, tagsToAdd, albumImages);
createdAlbum.ifPresent(album -> {
App.ex.setChosenAlbumId(album.getId());
try {
App.setRoot("view_album");
} catch (IOException e) {
e.printStackTrace();
}
});
}
else {
Optional<Album> createdAlbum = albumService.createEmptyAlbum(title, description, user, tagsToAdd);
createdAlbum.ifPresent(album -> {
App.ex.setChosenAlbumId(album.getId());
try {
App.setRoot("view_album");
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
/**
* Makes sure that user gave the album a title
* @return
*/
private boolean validateInpid() {
boolean check = true;
if (album_title_field.getText().isEmpty()) {
album_title_field.clear();
album_title_field.setStyle("-fx-prompt-text-fill: red");
album_title_field.setPromptText("* Please enter a title for the album");
check = false;
}
return check;
}
}
Loading