package org.businessmanager.service.filestorage; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.List; import org.apache.solr.common.util.FileUtils; import org.businessmanager.beans.BMConfiguration; import org.businessmanager.dao.StorageFileDao; import org.businessmanager.domain.StorageFile; import org.businessmanager.domain.security.User; import org.businessmanager.service.security.SpringSecurityService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @Transactional public class FileStorageServiceImpl implements FileStorageService { @Autowired private SpringSecurityService securityService; @Autowired private BMConfiguration configuration; @Autowired private StorageFileDao storageFileDao; @Override public void saveFile(StorageFile storageFile) { if (storageFile == null) { throw new IllegalArgumentException( "The parameter storageFile MUST NOT be null!"); } User user = securityService.getLoggedInUser(); String fileStoragePath = configuration.getFileStoragePath(); String filePath = fileStoragePath + user.getId() + storageFile.getContentType().getPath(); ensurePathExists(filePath); StorageFile latestStorageFile = storageFileDao.getLatestStorageFile( user, storageFile.getFileId()); Integer newVersion = latestStorageFile.getVersion() + 1; storageFile.setVersion(newVersion); String filename = storageFile.getFileId() + "_" + System.currentTimeMillis() + "_" + newVersion; if (MediaType.parseMediaType("application/pdf").equals( storageFile.getMediaType())) { filename += ".pdf"; } else if (MediaType .parseMediaType( "application/vnd.openxmlformats-officedocument.wordprocessingml.document") .equals(storageFile.getMediaType())) { filename += ".docx"; } File newFile = new File(filename); try { FileUtils.copyFile(storageFile.getFile(), newFile); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return; } storageFile.getFile().delete(); storageFile.setFile(newFile); storageFile.setFilepath(newFile.getAbsolutePath()); storageFile.setCreated(new Date()); storageFile.setUser(user); storageFileDao.save(storageFile); } @Override public List<StorageFile> getFilesOfContentType(FileContentType contentType) { User user = securityService.getLoggedInUser(); List<StorageFile> storageFiles = storageFileDao .getStorageFilesOfContentType(user, contentType); return storageFiles; } @Override public StorageFile getFile(String fileId, FileContentType contentType) { User user = securityService.getLoggedInUser(); StorageFile storageFile = storageFileDao.getLatestStorageFile(user, fileId); return storageFile; } private void ensurePathExists(String path) { File file = new File(path); if (!file.exists()) { file.mkdirs(); } } }