MediaRepository.java
package media;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.UUID;
/**
* Classe che incapsula la logica per il ritrovo di media (immagini) dal filesystem
*/
public class MediaRepository implements Serializable{
private Path uploadRoot = Path.of(System.getProperty("openejb.home"), "uploads");
private final long sizeLimit = 5*1024*1024; //todo: parametrizza nel metodo insert
/**
* Costruttore vuoto
* @return nuova istanza di MediaRepository
*/
public MediaRepository(){}
/**
* Costruttore con parametro per settare uploadRoot
* @param uploadRoot oggetto Path per settare uploadRoot
* @return nuova istanza di MediaRepository
*/
public MediaRepository(Path uploadRoot){
this.uploadRoot = uploadRoot;
}
/**
* Salva un file nel filesystem e ne restituisce il nome
* @param stream stream di dati
* @param filename nome del file da salvare
* @throws ReadLimitExceededException se il file supera i 5MB
* @throws IOException
* @return nuova istanza di MediaRepository
*/
public String insert(InputStream stream, String filename) throws IOException {
Files.createDirectories(uploadRoot);
File file = new File(uploadRoot.toFile(), filename);
Files.copy(new LimitedInputStream(stream,sizeLimit), file.toPath());
return filename;
}
/**
* Salva un file nel filesystem e ne restituisce un nome univoco generato in maniera casuale
* @param stream stream di dati
* @throws IOException
* @return nuova istanza di MediaRepository
*/
public String insert(InputStream stream) throws IOException {
return insert(stream, UUID.randomUUID().toString());
}
/**
* Rimuove un file dal filesystem dato un nome se esiste
* @param filename nome del file
* @throws IOException
*/
public void remove(String filename) throws IOException {
boolean successful = Files.deleteIfExists(uploadRoot.resolve(filename));
// if (!successful) { ???? }
}
/**
* Restituisce un file dal filesystem dato un nome se esiste altrimenti restituisce null
* @param filename nome del file
* @return stream di dati del file o null
*/
public InputStream get(String filename){
File file = new File(uploadRoot.toFile(), filename);
if (!file.exists() || !file.isFile())
return null;
try {
return new FileInputStream(file);
} catch (FileNotFoundException e) {
return null;
}
}
}