package alien4cloud.component.repository; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.util.UUID; import alien4cloud.component.repository.exception.RepositoryIOException; public abstract class AbstractLocalRepository implements IFileRepository { @Override public String storeFile(InputStream data) { String generatedId = UUID.randomUUID().toString(); storeFile(generatedId, data); return generatedId; } @Override public InputStream getFile(String id) { try { return Files.newInputStream(resolveFile(id)); } catch (IOException e) { throw new RepositoryIOException("Could not retrieve file with UID [" + id + "]", e); } } @Override public boolean isFileExist(String id) { return Files.isRegularFile(resolveFile(id)); } @Override public boolean deleteFile(String id) { return resolveFile(id).toFile().delete(); } @Override public void storeFile(String id, InputStream data) { try { checkRepository(); Files.copy(data, resolveFile(id), StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { throw new RepositoryIOException("Could not store file with UID [" + id + "]", e); } } @Override public long getFileLength(String id) { return resolveFile(id).toFile().length(); } public Path resolveFile(String id) { return getRepositoryPath().resolve(id); } public abstract Path getRepositoryPath(); public abstract void checkRepository() throws IOException; }