From f1891d578a8b82009eff486377eccf2a49670f75 Mon Sep 17 00:00:00 2001 From: Eirik Steira <eirsteir@stud.ntnu.no> Date: Mon, 23 Mar 2020 20:11:58 +0100 Subject: [PATCH] Refactor image metadata and histogram upload --- .../IDATT1002/controllers/DataExchange.java | 1 + .../IDATT1002/controllers/UploadedSingle.java | 13 +++---- .../java/NTNU/IDATT1002/models/Histogram.java | 14 ++----- .../NTNU/IDATT1002/service/ImageService.java | 30 ++++++++++----- .../IDATT1002/utils/MetaDataExtractor.java | 38 +++++++++---------- 5 files changed, 49 insertions(+), 47 deletions(-) diff --git a/src/main/java/NTNU/IDATT1002/controllers/DataExchange.java b/src/main/java/NTNU/IDATT1002/controllers/DataExchange.java index 03cab6ae..eb7f858d 100644 --- a/src/main/java/NTNU/IDATT1002/controllers/DataExchange.java +++ b/src/main/java/NTNU/IDATT1002/controllers/DataExchange.java @@ -18,6 +18,7 @@ public class DataExchange { searchField = ""; } public List<File> getUploadedFiles() { + System.out.println("SHITFUCK111"); return uploadedFiles; } diff --git a/src/main/java/NTNU/IDATT1002/controllers/UploadedSingle.java b/src/main/java/NTNU/IDATT1002/controllers/UploadedSingle.java index 5df00e9b..4a951124 100644 --- a/src/main/java/NTNU/IDATT1002/controllers/UploadedSingle.java +++ b/src/main/java/NTNU/IDATT1002/controllers/UploadedSingle.java @@ -2,13 +2,8 @@ package NTNU.IDATT1002.controllers; import NTNU.IDATT1002.App; import NTNU.IDATT1002.ApplicationState; - import NTNU.IDATT1002.models.Tag; import NTNU.IDATT1002.service.ImageService; -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; import javafx.event.ActionEvent; import javafx.fxml.Initializable; import javafx.scene.control.Button; @@ -18,9 +13,12 @@ import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.MouseEvent; -import javax.persistence.Table; +import java.io.File; import java.io.IOException; import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.ResourceBundle; /** @@ -141,7 +139,8 @@ public class UploadedSingle implements Initializable { List<File> list = App.ex.getUploadedFiles(); File fil = list.get(0); ArrayList<Tag> tags = new ArrayList<>(); - imageService.createImage(applicationState.getCurrentUser(), fil, tags); + System.out.println("SHITFUCK"); + imageService.createImage(ApplicationState.getCurrentUser(), fil, tags); /* list.stream().forEach(x -> { image = imageService.createImage(applicationState.getCurrentUser(), x).get(); List tags = tagStringSplit(photo_tag); diff --git a/src/main/java/NTNU/IDATT1002/models/Histogram.java b/src/main/java/NTNU/IDATT1002/models/Histogram.java index dc2680fb..73a4a83f 100644 --- a/src/main/java/NTNU/IDATT1002/models/Histogram.java +++ b/src/main/java/NTNU/IDATT1002/models/Histogram.java @@ -2,7 +2,6 @@ package NTNU.IDATT1002.models; import javax.persistence.*; -import javax.validation.constraints.NotBlank; /** * Creates histogram table @@ -27,21 +26,14 @@ public class Histogram { @JoinColumn(name = "metadata_id") private Metadata metadata; - @NotBlank (message = "Data may not be blank") +// @Column(name="data", length=294967295) +// @NotBlank (message = "Data may not be blank") + @Lob private String data; public Histogram() { } - /** - * Constrtuctor for Histogram, taking in both histogramId and data - * - * @param data - */ - public Histogram(String data){ - this.data = data; - } - public Long getHistogramId() { return histogramId; } diff --git a/src/main/java/NTNU/IDATT1002/service/ImageService.java b/src/main/java/NTNU/IDATT1002/service/ImageService.java index cec0fdc2..88de5b55 100644 --- a/src/main/java/NTNU/IDATT1002/service/ImageService.java +++ b/src/main/java/NTNU/IDATT1002/service/ImageService.java @@ -1,11 +1,6 @@ package NTNU.IDATT1002.service; -import NTNU.IDATT1002.models.Image; -import NTNU.IDATT1002.models.Metadata; -import NTNU.IDATT1002.models.Tag; -import NTNU.IDATT1002.models.User; -import NTNU.IDATT1002.repository.ImageRepository; -import NTNU.IDATT1002.repository.MetadataRepository; -import NTNU.IDATT1002.repository.TagRepository; +import NTNU.IDATT1002.models.*; +import NTNU.IDATT1002.repository.*; import NTNU.IDATT1002.service.filters.ImageFilter; import NTNU.IDATT1002.utils.ImageUtil; import NTNU.IDATT1002.utils.MetaDataExtractor; @@ -30,6 +25,8 @@ public class ImageService { private ImageRepository imageRepository; private MetadataRepository metadataRepository; private TagRepository tagRepository; + private HistorgramRepository historgramRepository; + private GeoLocatioRepository geoLocatioRepository; private MetaDataExtractor metaDataExtractor; /** @@ -42,6 +39,8 @@ public class ImageService { this.imageRepository = new ImageRepository(entityManager); this.metadataRepository = new MetadataRepository(entityManager); this.tagRepository = new TagRepository(entityManager); + this.historgramRepository = new HistorgramRepository(entityManager); + this.geoLocatioRepository = new GeoLocatioRepository(entityManager); this.metaDataExtractor = new MetaDataExtractor(); } @@ -54,21 +53,32 @@ public class ImageService { * @return Optional containing the saved image */ public Optional<Image> createImage(User user, File file, ArrayList<Tag> tags) { + + GeoLocation geoLocation = metaDataExtractor.getGeoLocation(file); + Histogram histogram = metaDataExtractor.getHistogram(file); + + geoLocation = geoLocatioRepository.save(geoLocation).orElse(null); + histogram = historgramRepository.save(histogram).orElse(null); + Image image = new Image(); - Metadata metadata = metaDataExtractor.assembleMetaData(file, image); + Metadata metadata = new Metadata(); + metadata.setImage(image); + metadata.setGeoLocation(geoLocation); + metadata.setHistogram(histogram); + System.out.println(metadata.getGeoLocation().getLatitude()); System.out.println(metadata.getHistogram().getData()); + metadata = metadataRepository.save(metadata).orElse(null); byte[] bFile = ImageUtil.convertToBytes(file.getPath()); - metadata = metadataRepository.save(metadata).get(); //TODO: Unsure what to do with imageAlbum image.setRawImage(bFile); image.setUser(user); image.setMetadata(metadata); image.setPath(file.getPath()); - //image.addTags(tags); +// image.addTags(tags); return imageRepository.save(image); } diff --git a/src/main/java/NTNU/IDATT1002/utils/MetaDataExtractor.java b/src/main/java/NTNU/IDATT1002/utils/MetaDataExtractor.java index 63af4bcb..6ebe07b1 100644 --- a/src/main/java/NTNU/IDATT1002/utils/MetaDataExtractor.java +++ b/src/main/java/NTNU/IDATT1002/utils/MetaDataExtractor.java @@ -5,25 +5,19 @@ import NTNU.IDATT1002.models.Histogram; import NTNU.IDATT1002.models.Image; import NTNU.IDATT1002.repository.GeoLocatioRepository; import NTNU.IDATT1002.repository.HistorgramRepository; -import NTNU.IDATT1002.repository.MetadataRepository; import com.drew.imaging.ImageMetadataReader; import com.drew.imaging.ImageProcessingException; import com.drew.metadata.Directory; import com.drew.metadata.Metadata; import com.drew.metadata.MetadataException; import com.drew.metadata.Tag; -import com.drew.metadata.exif.*; -import com.drew.metadata.jpeg.JpegDirectory; +import com.drew.metadata.exif.GpsDirectory; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; public class MetaDataExtractor { @@ -47,7 +41,7 @@ public class MetaDataExtractor { * @throws IOException * @throws MetadataException */ - private GeoLocation getGPS(File file) throws ImageProcessingException, IOException, MetadataException { + public GeoLocation getGeoLocation(File file) { String gps = ""; String latitude = ""; String longitude = ""; @@ -64,26 +58,32 @@ public class MetaDataExtractor { geoLocation.setLatitude(latitude); geoLocation.setLongitude(longitude); - geoLocationRepository.save(geoLocation); } - catch (NullPointerException e) { + catch (NullPointerException | ImageProcessingException | IOException e) { e.printStackTrace(); } return geoLocation; } - public Histogram getHistorgram(File file) throws ImageProcessingException, IOException { - String text = ""; - Metadata metadata = ImageMetadataReader.readMetadata(file); - Histogram histogram = new Histogram(); + public Histogram getHistogram(File file) { + Metadata metadata = null; + try { + metadata = ImageMetadataReader.readMetadata(file); + } catch (IOException | ImageProcessingException e) { + e.printStackTrace(); + } + + StringBuilder data = new StringBuilder(); + assert metadata != null; for(Directory d : metadata.getDirectories()) { for (Tag t : d.getTags()) { - text += t.toString() + " | "; + data.append(t.toString()).append(" | "); } } - histogram.setData(text); - historgramRepository.save(histogram); + Histogram histogram = new Histogram(); + histogram.setData(data.toString()); + return histogram; } @@ -92,8 +92,8 @@ public class MetaDataExtractor { NTNU.IDATT1002.models.Metadata metadata = new NTNU.IDATT1002.models.Metadata(); try { metadata.setImage(image); - metadata.setGeoLocation(getGPS(file)); - metadata.setHistogram(getHistorgram(file)); + metadata.setGeoLocation(getGeoLocation(file)); + metadata.setHistogram(getHistogram(file)); } catch (Exception e) { -- GitLab