private void setupCameraModel(Image image, Directory exifDirectory) {
   if (exifDirectory.containsTag(ExifDirectory.TAG_MODEL)) {
     String cameraModel = exifDirectory.getString(ExifDirectory.TAG_MODEL);
     image.setCameraModel(cameraModel);
   } else {
     image.setCameraModel("");
   }
 }
 private void setupDimensions(Image image, Directory exifDirectory, Directory jpgDirectory) {
   try {
     if (exifDirectory.containsTag(ExifDirectory.TAG_EXIF_IMAGE_WIDTH)
         && exifDirectory.containsTag(ExifDirectory.TAG_EXIF_IMAGE_HEIGHT)) {
       int width = exifDirectory.getInt(ExifDirectory.TAG_EXIF_IMAGE_WIDTH);
       image.setWidth(width);
       int height = exifDirectory.getInt(ExifDirectory.TAG_EXIF_IMAGE_HEIGHT);
       image.setHeight(height);
     } else {
       if (jpgDirectory.containsTag(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT)) {
         int width = jpgDirectory.getInt(JpegDirectory.TAG_JPEG_IMAGE_WIDTH);
         image.setWidth(width);
         int height = jpgDirectory.getInt(JpegDirectory.TAG_JPEG_IMAGE_HEIGHT);
         image.setHeight(height);
       }
     }
   } catch (MetadataException e) {
     addError(image, Constants.IMAGE_SAVING_ERROR);
   }
 }
 private Image constructImage(UploadItem item) {
   Image image = new Image();
   image.setUploaded(new Date());
   image.setDescription(item.getFileName());
   image.setName(item.getFileName());
   image.setSize(item.getFileSize());
   image.setPath(item.getFileName());
   image.setAllowComments(true);
   return image;
 }
 /**
  * Listenet, that invoked during file upload process. Only registered users can upload images.
  *
  * @param event - event, indicated that file upload started
  */
 @Restrict("#{s:hasRole('admin')}")
 public void listener(UploadEvent event) {
   UploadItem item = event.getUploadItem();
   // Construct image from item
   Image image = constructImage(item);
   try {
     // Extract metadata(size, camera model etc..)
     extractMetadata(item, image);
   } catch (Exception e1) {
     addError(item, image, Constants.FILE_PROCESSING_ERROR);
     return;
   }
   image.setAlbum(model.getSelectedAlbum());
   if (image.getAlbum() == null) {
     addError(item, image, Constants.NO_ALBUM_TO_DOWNLOAD_ERROR);
     return;
   }
   try {
     // Check if image with given name already exist
     if (imageAction.isImageWithThisPathExist(image.getAlbum(), image.getPath())) {
       // If exist generate new path for image
       String newPath = generateNewPath(image);
       image.setPath(newPath);
       image.setName(newPath);
     }
     // Save to database
     imageAction.addImage(image);
   } catch (Exception e) {
     addError(item, image, Constants.IMAGE_SAVING_ERROR);
     return;
   }
   // Save to disk
   if (!fileManager.addImage(image.getFullPath(), item.getFile().getPath())) {
     addError(item, image, Constants.FILE_SAVE_ERROR);
     return;
   }
   // Prepare to show in UI
   fileWrapper.getFiles().add(image);
   Events.instance().raiseEvent(Constants.IMAGE_ADDED_EVENT, image);
   // Delete temporary file
   item.getFile().delete();
 }
 private void setupCreatedDate(Image image, Directory exifDirectory) throws MetadataException {
   if (exifDirectory.containsTag(ExifDirectory.TAG_DATETIME_ORIGINAL)) {
     Date time = exifDirectory.getDate(ExifDirectory.TAG_DATETIME_ORIGINAL);
     image.setCreated(time);
   }
 }
 private String generateNewPath(Image image) throws PhotoAlbumException {
   String path = image.getPath().substring(0, image.getPath().lastIndexOf(Constants.DOT));
   Long countCopies = imageAction.getCountIdenticalImages(image.getAlbum(), path) + 1;
   String newPath = fileManager.transformPath(image.getPath(), "_" + countCopies);
   return newPath;
 }