From 5cdcf44c0a53f15bcc2dccb4be6fe3c20bfe8e8b Mon Sep 17 00:00:00 2001
From: Simon Jensen <simon.jensen.lg@gmail.com>
Date: Thu, 19 Mar 2020 16:19:59 +0100
Subject: [PATCH] Dev copy, added upload page files. Ready for merging

---
 .../controllers/UploadController.java         | 157 ++++++++++++++++++
 .../resources/NTNU/IDATT1002/upload_page.fxml |  96 +++++++++++
 2 files changed, 253 insertions(+)
 create mode 100644 src/main/java/NTNU/IDATT1002/controllers/UploadController.java
 create mode 100644 src/main/resources/NTNU/IDATT1002/upload_page.fxml

diff --git a/src/main/java/NTNU/IDATT1002/controllers/UploadController.java b/src/main/java/NTNU/IDATT1002/controllers/UploadController.java
new file mode 100644
index 00000000..27998d53
--- /dev/null
+++ b/src/main/java/NTNU/IDATT1002/controllers/UploadController.java
@@ -0,0 +1,157 @@
+/**
+ * Controls the buttons and changable elements on upload page
+ * @version 1.0 17.03.2020
+ * @author Simon Jensen
+ */
+
+package NTNU.IDATT1002.controllers;
+
+import NTNU.IDATT1002.App;
+import javafx.scene.control.Button;
+import javafx.scene.control.TextField;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.input.DragEvent;
+import javafx.scene.input.KeyEvent;
+import javafx.scene.input.TransferMode;
+import javafx.scene.layout.Pane;
+import javafx.scene.layout.VBox;
+import javafx.stage.FileChooser;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class UploadController {
+    public Button uploadBtn;
+    public VBox thumbnailsField;
+    public Pane dragDropField;
+    public TextField searchField;
+
+    /**
+     * Method that changes stage to Explore page
+     * @throws IOException
+     */
+    public void switchToExplore() throws IOException {
+        App.setRoot("explore");
+    }
+
+    /**
+     * Method that changes stage to Album page
+     * @throws IOException
+     */
+    public void switchToAlbum() throws IOException {
+        App.setRoot("album");
+    }
+
+    /**
+     * Method that changes stage to Map page
+     * @throws IOException
+     */
+    public void switchToMap() throws IOException {
+        App.setRoot("map");
+    }
+
+    /**
+     * Method for searching by tags, ect.
+     * @param keyEvent
+     */
+    public void search(KeyEvent keyEvent) {
+        //TODO: Make search method
+    }
+
+    /**
+     * Method that opens filebrowser with an image filter.
+     * The user chooses what files to upload
+     * @throws MalformedURLException
+     */
+    public void chooseFile() throws MalformedURLException {
+        FileChooser fileChooser = new FileChooser();
+        fileChooser.setTitle("Choose image files");
+        fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Image Files", "*.png","*.jpg", "*.jpeg"));
+        // Show save file dialog
+        List<File> list = fileChooser.showOpenMultipleDialog(uploadBtn.getScene().getWindow());
+
+        if (list != null){
+            for (File file : list){
+                //Made a method to confirm that the images was uploaded correctly
+                addThumbnail(file);
+            }
+        }
+    }
+
+    /**
+     * Method that finds the extension/filetype
+     * @param fileName the name of the file (img.jpg ect.)
+     * @return file extension (jpg, png ect.)
+     */
+    public String getExtension(String fileName){
+        String extension = "";
+
+        int i = fileName.lastIndexOf('.');
+        //if the name is not empty
+        if (i > 0 && i < fileName.length() - 1){
+            return fileName.substring(i + 1).toLowerCase();
+        }
+        return extension;
+    }
+
+    /**
+     * Method that decides whenever the file hoovered over the pane is valid or not.
+     * Called when something is hoovered over the pane.
+     * @param event something is dragged over the container
+     */
+    public void acceptDrop(DragEvent event) {
+        // Extensions that are valid to be drag-n-dropped
+        //TODO: Choose valid file types
+        List<String> validExtensions = Arrays.asList("jpg", "png", "jpeg");
+        //Checks if the event contains files
+        if(event.getDragboard().hasFiles()){
+            if (!validExtensions.containsAll(
+                    //Makes a list out of the events file extensions
+                    event.getDragboard().getFiles().stream()
+                            .map(file -> getExtension(file.getName()))
+                            .collect(Collectors.toList()))) {
+
+                event.consume();
+                return;
+            }
+            //Makes it possible to transfer the files
+            event.acceptTransferModes(TransferMode.ANY);
+        }
+    }
+
+    /**
+     * Method that stores the dropped files. It is not possible to transfer files
+     * without them already being accepted in acceptDrop() method.
+     * @param event something is dropped into the container
+     * @throws MalformedURLException
+     */
+    public void droppedFiles(DragEvent event) throws MalformedURLException {
+        List<File> list = event.getDragboard().getFiles();
+        for (File file : list){
+            addThumbnail(file);
+        }
+    }
+
+    /**
+     * Test-method to confirm that the image drop went well
+     * @param file an image file
+     * @throws MalformedURLException
+     */
+    //TODO: Remove method?
+    public void addThumbnail(File file) throws MalformedURLException {
+        Image image = new Image(file.toURI().toURL().toString());
+        ImageView view = new ImageView();
+        view.setImage(image);
+
+        //setting the fit height and width of the image view
+        view.setFitHeight(30);
+        view.setFitWidth(30);
+
+        thumbnailsField.getChildren().add(view);
+    }
+}
diff --git a/src/main/resources/NTNU/IDATT1002/upload_page.fxml b/src/main/resources/NTNU/IDATT1002/upload_page.fxml
new file mode 100644
index 00000000..835a3037
--- /dev/null
+++ b/src/main/resources/NTNU/IDATT1002/upload_page.fxml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.geometry.*?>
+<?import javafx.scene.*?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+<?import javafx.scene.text.*?>
+
+<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="NTNU.IDATT1002.controllers.UploadController">
+<top>
+    <HBox prefHeight="71.0" prefWidth="600.0" style="-fx-background-color: #7b7b7b;" BorderPane.alignment="CENTER">
+        <children>
+            <HBox alignment="CENTER" prefHeight="135.0" prefWidth="404.0">
+                <children>
+                    <Pane onMouseClicked="#switchToExplore" prefHeight="71.0" prefWidth="100.0">
+                        <children>
+                            <Text layoutX="21.0" layoutY="42.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Explore">
+                                <font>
+                                    <Font size="18.0" />
+                                </font>
+                            </Text>
+                        </children>
+                    </Pane>
+                    <Pane onMouseClicked="#switchToAlbum" prefHeight="71.0" prefWidth="100.0">
+                        <children>
+                            <Text layoutX="24.0" layoutY="42.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Album">
+                                <font>
+                                    <Font size="18.0" />
+                                </font>
+                            </Text>
+                        </children>
+                    </Pane>
+                    <Pane onMouseClicked="#switchToMap" prefHeight="71.0" prefWidth="100.0">
+                        <children>
+                            <Text layoutX="32.0" layoutY="42.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Map">
+                                <font>
+                                    <Font size="18.0" />
+                                </font>
+                            </Text>
+                        </children>
+                    </Pane>
+                    <Pane prefHeight="71.0" prefWidth="100.0" style="-fx-background-color: #d6d6d6;">
+                        <children>
+                            <Text layoutX="18.0" layoutY="43.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Upload" wrappingWidth="63.408203125">
+                                <font>
+                                    <Font size="18.0" />
+                                </font>
+                            </Text>
+                        </children>
+                    </Pane>
+                </children>
+            </HBox>
+            <HBox alignment="CENTER" prefHeight="74.0" prefWidth="200.0">
+                <children>
+                    <TextField fx:id="searchField" focusTraversable="false" onKeyTyped="#search" prefHeight="26.0" prefWidth="133.0" promptText="Search" />
+                </children>
+            </HBox>
+        </children>
+        <BorderPane.margin>
+            <Insets />
+        </BorderPane.margin>
+    </HBox>
+</top>
+<left>
+    <Pane prefHeight="282.0" prefWidth="71.0" style="-fx-background-color: #b8b8b8;" BorderPane.alignment="CENTER" />
+</left>
+<center>
+    <Pane prefHeight="212.0" prefWidth="338.0" snapToPixel="false" style="-fx-background-color: #d6d6d6;" BorderPane.alignment="BOTTOM_RIGHT">
+        <children>
+            <Button fx:id="uploadBtn" alignment="CENTER" contentDisplay="CENTER" layoutX="159.0" layoutY="181.0" mnemonicParsing="false" onMouseClicked="#chooseFile" prefHeight="25.0" prefWidth="152.0" text="Choose files" />
+            <Pane fx:id="dragDropField" layoutX="111.0" layoutY="58.0" onDragDropped="#droppedFiles" onDragOver="#acceptDrop" prefHeight="106.0" prefWidth="248.0" style="-fx-background-color: lightgrey; -fx-border-color: grey;">
+                <children>
+                    <Text layoutX="61.0" layoutY="58.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Drag and drop files" wrappingWidth="125.33671569824219">
+                        <font>
+                            <Font size="14.0" />
+                        </font>
+                    </Text>
+                </children>
+                <cursor>
+                    <Cursor fx:constant="DEFAULT" />
+                </cursor>
+            </Pane>
+        </children>
+    </Pane>
+</center>
+<right>
+    <Pane prefHeight="282.0" prefWidth="58.0" style="-fx-background-color: #a5a5a5;" BorderPane.alignment="CENTER">
+        <children>
+            <VBox fx:id="thumbnailsField" layoutX="1.0" layoutY="14.0" prefHeight="200.0" prefWidth="58.0" />
+        </children></Pane>
+</right>
+<bottom>
+    <Pane prefHeight="47.0" prefWidth="600.0" style="-fx-background-color: #727272;" BorderPane.alignment="CENTER" />
+</bottom>
+</BorderPane>
+
-- 
GitLab