diff --git a/src/main/java/NTNU/IDATT1002/controllers/ViewAlbum.java b/src/main/java/NTNU/IDATT1002/controllers/ViewAlbum.java index 4fbc5bbe0a4a7bcdd3eb2d3b544beef2ae19f492..499b4555a4b14ad8cd4d3cd429e92d7a61ed868b 100644 --- a/src/main/java/NTNU/IDATT1002/controllers/ViewAlbum.java +++ b/src/main/java/NTNU/IDATT1002/controllers/ViewAlbum.java @@ -2,9 +2,9 @@ package NTNU.IDATT1002.controllers; import NTNU.IDATT1002.App; import NTNU.IDATT1002.models.ImageAlbum; +import NTNU.IDATT1002.service.ImageAlbumDocument; import NTNU.IDATT1002.service.ImageAlbumService; import NTNU.IDATT1002.service.TagService; -import NTNU.IDATT1002.utils.PdfDocument; import javafx.application.HostServices; import javafx.event.ActionEvent; import javafx.fxml.FXML; @@ -18,8 +18,6 @@ import javafx.scene.layout.Pane; import javafx.scene.shape.StrokeType; import javafx.scene.text.Font; import javafx.scene.text.Text; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import javax.persistence.EntityManager; import java.io.File; @@ -49,7 +47,7 @@ public class ViewAlbum implements Initializable { public Text album_descField; public Pane metadata_pane; - public Button create_album_pdf; + public Button create_album_document; public ImageView main_picture; @@ -70,13 +68,11 @@ public class ViewAlbum implements Initializable { private ImageAlbumService imageAlbumService; private Long currentAlbumId; - private Logger logger; - + public ViewAlbum() { EntityManager entityManager = App.ex.getEntityManager(); this.imageAlbumService = new ImageAlbumService(entityManager); currentAlbumId = App.ex.getChosenAlbumId(); - logger = LoggerFactory.getLogger("ImageApplicationLogger"); } /** @@ -372,24 +368,15 @@ public class ViewAlbum implements Initializable { } /** - * Create and save album pdf to users downloads directory. + * Retrieve and display album document. * * @param actionEvent */ - public void createPdf(ActionEvent actionEvent) { + public void createDocument(ActionEvent actionEvent) { Long currentAlbumId = App.ex.getChosenAlbumId(); - ImageAlbum imageAlbum = imageAlbumService.getImageAlbumById(currentAlbumId) - .orElseThrow(IllegalArgumentException::new); - - String destinationFile = String.format("%s/downloads/%s.pdf", - System.getProperty("user.home"), - imageAlbum.getTitle()); - - PdfDocument document = new PdfDocument(imageAlbum, destinationFile); - document.createPdfDocument(); - logger.info("[x] Saved PDF document to " + destinationFile); + ImageAlbumDocument document = imageAlbumService.getDocument(currentAlbumId); - displayPdfLink(document.getPdfDocument()); + displayDocumentLink(document.getDocument()); } /** @@ -397,9 +384,9 @@ public class ViewAlbum implements Initializable { * * @param pdfDocument the pdf document to be opened */ - private void displayPdfLink(File pdfDocument) { - create_album_pdf.setText("Open PDF"); - create_album_pdf.setOnAction(actionEvent -> openPdfDocument(actionEvent, pdfDocument)); + private void displayDocumentLink(File pdfDocument) { + create_album_document.setText("Open PDF"); + create_album_document.setOnAction(actionEvent -> openDocument(actionEvent, pdfDocument)); } /** @@ -408,7 +395,7 @@ public class ViewAlbum implements Initializable { * @param actionEvent * @param file the file to open */ - private void openPdfDocument(ActionEvent actionEvent, File file) { + private void openDocument(ActionEvent actionEvent, File file) { HostServices hostServices = App.ex.getHostServices(); hostServices.showDocument(file.getAbsolutePath()); } diff --git a/src/main/java/NTNU/IDATT1002/service/ImageAlbumDocument.java b/src/main/java/NTNU/IDATT1002/service/ImageAlbumDocument.java new file mode 100644 index 0000000000000000000000000000000000000000..133cb3fcc616b8d62f3ce34b51b08865bebf55a2 --- /dev/null +++ b/src/main/java/NTNU/IDATT1002/service/ImageAlbumDocument.java @@ -0,0 +1,17 @@ +package NTNU.IDATT1002.service; + +import java.io.File; + +/** + * Image Album Document Interface. Defines operations for getting and creating documents. + * + * @author Eirik Steira + * @version 1.0 30.03.20 + */ +public interface ImageAlbumDocument { + + File getDocument(); + + void createDocument(); + +} diff --git a/src/main/java/NTNU/IDATT1002/service/ImageAlbumService.java b/src/main/java/NTNU/IDATT1002/service/ImageAlbumService.java index d5b5cd0ee9bb746561cc8ea71038769a64393dfc..172098968103033007b901220aa677242919f647 100644 --- a/src/main/java/NTNU/IDATT1002/service/ImageAlbumService.java +++ b/src/main/java/NTNU/IDATT1002/service/ImageAlbumService.java @@ -7,6 +7,8 @@ import NTNU.IDATT1002.models.Tag; import NTNU.IDATT1002.models.User; import NTNU.IDATT1002.repository.ImageAlbumRepository; import NTNU.IDATT1002.repository.TagRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.persistence.EntityManager; import java.util.ArrayList; @@ -30,6 +32,7 @@ public class ImageAlbumService { private TagRepository tagRepository; + private Logger logger; /** * Inject entity manager instance to the repositories. @@ -37,6 +40,7 @@ public class ImageAlbumService { public ImageAlbumService(EntityManager entityManager) { this.imageAlbumRepository = new ImageAlbumRepository(entityManager); this.tagRepository = new TagRepository(entityManager); + logger = LoggerFactory.getLogger("ImageApplicationLogger"); } public Optional<ImageAlbum> getImageAlbumById(Long imageAlbumId) { @@ -102,6 +106,27 @@ public class ImageAlbumService { return createImageAlbum(title, description, user, tags, new ArrayList<>()); } + /** + * Create and return a new document for the image album with the given id. + * The document is saved to the users dowloads folder. + * + * @param albumId the album id to get a document for + * @return the document created + */ + public ImageAlbumDocument getDocument(Long albumId) { + ImageAlbum imageAlbum = getImageAlbumById(albumId) + .orElseThrow(IllegalArgumentException::new); + + String destinationFile = String.format("%s/downloads/%s.pdf", + System.getProperty("user.home"), + imageAlbum.getTitle()); + + ImageAlbumDocument document = new PdfDocument(imageAlbum, destinationFile); + document.createDocument(); + logger.info("[x] Saved PDF document to " + destinationFile); + + return document; + } /** * Retrieves all image albums created by the given user by username. diff --git a/src/main/java/NTNU/IDATT1002/utils/PdfDocument.java b/src/main/java/NTNU/IDATT1002/service/PdfDocument.java similarity index 97% rename from src/main/java/NTNU/IDATT1002/utils/PdfDocument.java rename to src/main/java/NTNU/IDATT1002/service/PdfDocument.java index f407ecd68061d80721f80d2fc8110ec93267484b..390aed8622e3207f9657dcc7227bb7f4f24355a7 100644 --- a/src/main/java/NTNU/IDATT1002/utils/PdfDocument.java +++ b/src/main/java/NTNU/IDATT1002/service/PdfDocument.java @@ -1,4 +1,4 @@ -package NTNU.IDATT1002.utils; +package NTNU.IDATT1002.service; import NTNU.IDATT1002.models.Image; import NTNU.IDATT1002.models.ImageAlbum; @@ -18,7 +18,7 @@ import java.util.Date; * @author Eirik Steira * @version 1.0 22.03.20 */ -public class PdfDocument { +public class PdfDocument implements ImageAlbumDocument { /** * Height ratio satisfying a 16:9 ratio. @@ -48,14 +48,14 @@ public class PdfDocument { this.document = new Document(); } - public File getPdfDocument() { + public File getDocument() { return new File(DESTINATION_FILE); } /** * Create a new pdf document. */ - public void createPdfDocument() { + public void createDocument() { try { generatePdfDocument(); } catch (IOException | DocumentException e) { diff --git a/src/main/resources/NTNU/IDATT1002/view_album.fxml b/src/main/resources/NTNU/IDATT1002/view_album.fxml index 2a31bec933c22565f328130c2abb6ccfc924fede..08871ee0b36cc45e29224fde86003f6f37086b4c 100644 --- a/src/main/resources/NTNU/IDATT1002/view_album.fxml +++ b/src/main/resources/NTNU/IDATT1002/view_album.fxml @@ -104,7 +104,7 @@ </font> </Text> <Pane fx:id="metadata_pane" layoutX="76.0" layoutY="371.0" prefHeight="391.0" prefWidth="822.0" style="-fx-background-color: #ffffff;" /> - <Button fx:id="create_album_pdf" layoutX="394.0" layoutY="810.0" mnemonicParsing="false" onAction="#createPdf" text="CREATE ALBUM PDF"> + <Button fx:id="create_album_document" layoutX="394.0" layoutY="810.0" mnemonicParsing="false" onAction="#createDocument" text="CREATE ALBUM PDF"> <font> <Font size="18.0" /> </font> diff --git a/src/test/java/NTNU/IDATT1002/utils/PdfDocumentTest.java b/src/test/java/NTNU/IDATT1002/utils/PdfDocumentTest.java index 54bbfdaad68bb33c25ce0d97f585abca1552208a..47fffd8056100019efcacade4bf5b12610a08e75 100644 --- a/src/test/java/NTNU/IDATT1002/utils/PdfDocumentTest.java +++ b/src/test/java/NTNU/IDATT1002/utils/PdfDocumentTest.java @@ -3,6 +3,7 @@ package NTNU.IDATT1002.utils; import NTNU.IDATT1002.models.Image; import NTNU.IDATT1002.models.ImageAlbum; import NTNU.IDATT1002.models.User; +import NTNU.IDATT1002.service.PdfDocument; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -19,13 +20,8 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; class PdfDocumentTest { private static final String PATH_TO_PDF = "src/test/java/tmp/generatedImageAlbumPdf.pdf"; - - private static final String PATH_SEPARATOR = File.pathSeparator; - private ImageAlbum imageAlbum; - private Image image; - private User user; /** @@ -66,9 +62,9 @@ class PdfDocumentTest { * Test that a pdf document is successfully created. */ @Test - void testCreatePdfDocumentCreatesPdfDocument() { + void testCreateDocumentCreatesPdfDocument() { PdfDocument document = new PdfDocument(imageAlbum, PATH_TO_PDF); - document.createPdfDocument(); + document.createDocument(); assertNotNull(document); }