You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
3.8 KiB
Java
113 lines
3.8 KiB
Java
package de.thm.tlf.photoViewer;
|
|
|
|
import de.thm.tlf.photoViewer.data.Picture;
|
|
import de.thm.tlf.photoViewer.data.PicturePreview;
|
|
|
|
import java.io.File;
|
|
import java.util.*;
|
|
|
|
/**
|
|
* Class for handling interaction with Images
|
|
* Uses custom Image-wrappers "Picture" and "PicturePreview"
|
|
* Implemented using singleton pattern to avoid multiple instances
|
|
*/
|
|
public final class PictureHandler {
|
|
////////////////////////////
|
|
//------ Attributes ------//
|
|
////////////////////////////
|
|
private final ArrayList<Picture> pictures = new ArrayList<>();
|
|
private final ArrayList<PicturePreview> previews = new ArrayList<>();
|
|
|
|
private int currentPictureID = -1;
|
|
|
|
private static final PictureHandler INSTANCE = new PictureHandler();
|
|
|
|
//////////////////////////////
|
|
//------ Constructors ------//
|
|
//////////////////////////////
|
|
|
|
/**
|
|
* Prevent creation of new instances
|
|
*/
|
|
private PictureHandler() {}
|
|
|
|
/**
|
|
* Singleton-Pattern method to acquire the only instance
|
|
* @return PictureHandler instance
|
|
*/
|
|
public static PictureHandler getInstance() {return INSTANCE;}
|
|
|
|
/////////////////////////
|
|
//------ Methods ------//
|
|
/////////////////////////
|
|
|
|
/**
|
|
* @return Arraylist of the PicturePreview
|
|
*/
|
|
public ArrayList<PicturePreview> getPreviews(){
|
|
return previews;
|
|
}
|
|
|
|
/**
|
|
* Method to load a list of Files into Picture objects and store them locally
|
|
* @param pictureFiles List of files that will be converted to Pictures
|
|
*/
|
|
public void loadPictures(List<File> pictureFiles){
|
|
pictures.clear();
|
|
previews.clear();
|
|
for(File picFile : pictureFiles){
|
|
pictures.add(new Picture(picFile.getPath()));
|
|
previews.add(new PicturePreview(picFile.getPath()));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Determines the next picture that should be displayed.
|
|
* Wraps around to the beginning of the list if picture after the last one is requested.
|
|
* @return Picture object that should be displayed next from the ArrayList pictures
|
|
* @throws NoPicturesLoadedException Exception for when no pictures are loaded yet but tried to access them
|
|
*/
|
|
public Picture getNextPicture() throws NoPicturesLoadedException {
|
|
if(pictures.size() <= 0){
|
|
throw new NoPicturesLoadedException();
|
|
}
|
|
else {
|
|
currentPictureID = (currentPictureID + 1) % pictures.size();
|
|
return pictures.get(currentPictureID);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Determines the previous picture that should be displayed.
|
|
* Wraps around to the end of the list if picture before the first one is requested.
|
|
* @return Picture object that should be displayed next from the ArrayList pictures
|
|
* @throws NoPicturesLoadedException Exception for when no pictures are loaded yet but tried to access them
|
|
*/
|
|
public Picture getPrevPicture() throws NoPicturesLoadedException{
|
|
if(pictures.size() <= 0){
|
|
throw new NoPicturesLoadedException();
|
|
}
|
|
else {
|
|
currentPictureID = (currentPictureID + pictures.size() - 1) % pictures.size();
|
|
return pictures.get(currentPictureID);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Method to acquire picture by the list-ID of a picture
|
|
* @param pictureID the ID of the Picture that is being requested
|
|
* @return Picture from the pictures ArrayList on position of the provided ID
|
|
* @throws NoPicturesLoadedException Exception for when no pictures are loaded yet but tried to access them
|
|
*/
|
|
public Picture getPictureByID(int pictureID) throws NoPicturesLoadedException{
|
|
if(pictures.size() <= 0){
|
|
throw new NoPicturesLoadedException();
|
|
}
|
|
else {
|
|
return pictures.get(pictureID);
|
|
}
|
|
}
|
|
//------ End Methods ------//
|
|
}
|
|
|