From 9276e797f9a27f13ec4103da0dbc843cb93711d9 Mon Sep 17 00:00:00 2001 From: "Darryl L. Pierce" Date: Sat, 8 May 2021 11:20:51 -0400 Subject: [PATCH] Fixed more issues reported by SonarCloud [#354] * Changed ComicFileUtils to a component. --- .../archive/AbstractArchiveAdaptor.java | 5 ++-- .../handlers/ComicFileHandler.java | 6 ++-- .../loaders/ImageEntryLoader.java | 2 +- .../comixedproject/utils/ComicFileUtils.java | 28 +++++++++++++++---- .../java/org/comixedproject/utils/Utils.java | 2 +- .../loaders/ImageEntryLoaderTest.java | 2 -- .../java/org/comixedproject/ComiXedApp.java | 2 +- .../comixedproject/plugins/PluginManager.java | 10 +++---- .../interpreters/PluginInterpreterLoader.java | 2 +- .../auditlog/AuditableEndpointAspect.java | 10 +++---- .../CachingRequestBodyFilter.java | 2 +- .../ComiXedAuthenticationFilter.java | 7 ++--- .../ComiXedAuthenticationProvider.java | 2 +- .../ComiXedUserDetailsService.java | 4 +-- .../authentication/JwtTokenUtil.java | 6 ++-- .../controller/file/FileController.java | 21 -------------- .../controller/file/FileControllerTest.java | 14 +++++++++- .../service/file/FileService.java | 9 ++---- .../service/file/FileServiceTest.java | 7 +++++ .../comixedproject/task/MoveComicTask.java | 6 ++-- 20 files changed, 77 insertions(+), 70 deletions(-) diff --git a/comixed-adaptors/src/main/java/org/comixedproject/adaptors/archive/AbstractArchiveAdaptor.java b/comixed-adaptors/src/main/java/org/comixedproject/adaptors/archive/AbstractArchiveAdaptor.java index b1360a027..d9bc3cbb0 100644 --- a/comixed-adaptors/src/main/java/org/comixedproject/adaptors/archive/AbstractArchiveAdaptor.java +++ b/comixed-adaptors/src/main/java/org/comixedproject/adaptors/archive/AbstractArchiveAdaptor.java @@ -62,8 +62,9 @@ public abstract class AbstractArchiveAdaptor implements ArchiveAdaptor, Initi @Autowired protected FileTypeIdentifier fileTypeIdentifier; @Autowired protected ComicInfoEntryAdaptor comicInfoEntryAdaptor; @Autowired protected ComicFileHandler comicFileHandler; - protected List loaders = new ArrayList<>(); + @Autowired private ComicFileUtils comicFileUtils; + protected List loaders = new ArrayList<>(); protected Map entryLoaders = new HashMap<>(); private Set imageTypes = new HashSet<>(); private String defaultExtension; @@ -260,7 +261,7 @@ public Comic saveComic(Comic source, boolean renamePages) this.saveComicInternal(source, tempFilename, renamePages); String filename = - ComicFileUtils.findAvailableFilename( + this.comicFileUtils.findAvailableFilename( FilenameUtils.removeExtension(source.getFilename()), 0, this.defaultExtension); var file1 = new File(tempFilename); var file2 = new File(filename); diff --git a/comixed-adaptors/src/main/java/org/comixedproject/handlers/ComicFileHandler.java b/comixed-adaptors/src/main/java/org/comixedproject/handlers/ComicFileHandler.java index 229ccf441..d2679590c 100644 --- a/comixed-adaptors/src/main/java/org/comixedproject/handlers/ComicFileHandler.java +++ b/comixed-adaptors/src/main/java/org/comixedproject/handlers/ComicFileHandler.java @@ -145,7 +145,7 @@ public void loadComic(Comic comic, boolean ignoreComicInfoXml) throws ComicFileH } log.debug("Loading comic: " + comic.getFilename()); - ArchiveAdaptor archiveAdaptor = this.getArchiveAdaptorFor(comic.getFilename()); + var archiveAdaptor = this.getArchiveAdaptorFor(comic.getFilename()); try { archiveAdaptor.loadComic(comic); @@ -176,11 +176,11 @@ public void loadComicArchiveType(final Comic comic) throws ComicFileHandlerExcep if (archiveMimeSubtype == null) throw new ComicFileHandlerException("Unknown comic type"); - ArchiveType archiveType = this.archiveTypes.get(archiveMimeSubtype); + var archiveType = this.archiveTypes.get(archiveMimeSubtype); log.debug("Archive type: {}", archiveType); comic.setArchiveType(archiveType); - ArchiveAdaptor archiveAdaptor = this.archiveAdaptors.get(archiveMimeSubtype); + var archiveAdaptor = this.archiveAdaptors.get(archiveMimeSubtype); if (archiveAdaptor == null) throw new ComicFileHandlerException( diff --git a/comixed-adaptors/src/main/java/org/comixedproject/loaders/ImageEntryLoader.java b/comixed-adaptors/src/main/java/org/comixedproject/loaders/ImageEntryLoader.java index 4f50bb0ac..bad4b78a9 100644 --- a/comixed-adaptors/src/main/java/org/comixedproject/loaders/ImageEntryLoader.java +++ b/comixed-adaptors/src/main/java/org/comixedproject/loaders/ImageEntryLoader.java @@ -58,7 +58,7 @@ public void loadContent( final BufferedImage bimage = ImageIO.read(new ByteArrayInputStream(content)); final int width = bimage.getWidth(); final int height = bimage.getHeight(); - Page page = new Page(); + var page = new Page(); page.setFilename(filename); page.setPageType(this.pageTypeRepository.getDefaultPageType()); page.setHash(hash); diff --git a/comixed-adaptors/src/main/java/org/comixedproject/utils/ComicFileUtils.java b/comixed-adaptors/src/main/java/org/comixedproject/utils/ComicFileUtils.java index 6ede0aaeb..0273c1a6b 100644 --- a/comixed-adaptors/src/main/java/org/comixedproject/utils/ComicFileUtils.java +++ b/comixed-adaptors/src/main/java/org/comixedproject/utils/ComicFileUtils.java @@ -21,6 +21,7 @@ import java.io.File; import java.text.MessageFormat; import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Component; /** * ComicFileUtils provides a set of utility methods related to comic files and @@ -28,11 +29,20 @@ * * @author Darryl L. Pierce */ +@Component @Log4j2 public class ComicFileUtils { - public static String findAvailableFilename( - String filename, int attempt, String defaultExtension) { - String candidate = filename; + /** + * Looks for the next available filename for a comic file. + * + * @param filename the root filename + * @param attempt the current attempt + * @param defaultExtension the extension for the file + * @return the filename to use + */ + public String findAvailableFilename( + final String filename, final int attempt, final String defaultExtension) { + String candidate = null; if (attempt > 0) { candidate = MessageFormat.format("{0}-{1}.{2}", filename, attempt, defaultExtension); @@ -40,13 +50,19 @@ public static String findAvailableFilename( candidate = MessageFormat.format("{0}.{1}", filename, defaultExtension); } - File file = new File(candidate); + var file = new File(candidate); return (!file.exists()) ? candidate - : findAvailableFilename(filename, ++attempt, defaultExtension); + : findAvailableFilename(filename, attempt + 1, defaultExtension); } - public static boolean isComicFile(File file) { + /** + * Checks if the file is a comic file based on extension. + * + * @param file the file + * @return true if it's comic file + */ + public boolean isComicFile(File file) { String name = file.getName().toUpperCase(); boolean result = (name.endsWith("CBZ") || name.endsWith("CBR") || name.endsWith("CB7")); return result; diff --git a/comixed-adaptors/src/main/java/org/comixedproject/utils/Utils.java b/comixed-adaptors/src/main/java/org/comixedproject/utils/Utils.java index 9278f00c3..e2c84b43b 100644 --- a/comixed-adaptors/src/main/java/org/comixedproject/utils/Utils.java +++ b/comixed-adaptors/src/main/java/org/comixedproject/utils/Utils.java @@ -22,7 +22,7 @@ @Log4j2 public class Utils { public String createHash(byte[] bytes) { - StringBuilder result = new StringBuilder(convertToHexString(DigestUtils.md5Digest(bytes))); + var result = new StringBuilder(convertToHexString(DigestUtils.md5Digest(bytes))); while (result.length() < 32) result = result.insert(0, "0"); return result.toString(); } diff --git a/comixed-adaptors/src/test/java/org/comixedproject/loaders/ImageEntryLoaderTest.java b/comixed-adaptors/src/test/java/org/comixedproject/loaders/ImageEntryLoaderTest.java index 3bc15b81c..9f0a4d6c5 100644 --- a/comixed-adaptors/src/test/java/org/comixedproject/loaders/ImageEntryLoaderTest.java +++ b/comixed-adaptors/src/test/java/org/comixedproject/loaders/ImageEntryLoaderTest.java @@ -68,7 +68,6 @@ public void testLoadJPGImage() throws IOException { assertEquals(1, comic.getPageCount()); assertNotNull(comic.getPage(0)); - // assertEquals(content, comic.getPage(0).getContent()); assertSame(pageType, comic.getPage(0).getPageType()); } @@ -84,7 +83,6 @@ public void testLoadWebPImage() throws IOException { assertEquals(1, comic.getPageCount()); assertNotNull(comic.getPage(0)); - // assertEquals(content, comic.getPage(0).getContent()); assertSame(pageType, comic.getPage(0).getPageType()); } } diff --git a/comixed-app/src/main/java/org/comixedproject/ComiXedApp.java b/comixed-app/src/main/java/org/comixedproject/ComiXedApp.java index e809c101d..abff93497 100644 --- a/comixed-app/src/main/java/org/comixedproject/ComiXedApp.java +++ b/comixed-app/src/main/java/org/comixedproject/ComiXedApp.java @@ -33,7 +33,7 @@ public class ComiXedApp implements CommandLineRunner { public static final String FULL_NAME_AND_VERSION = FULL_NAME + " " + VERSION; public static void main(String[] args) { - SpringApplication app = new SpringApplication(ComiXedApp.class); + var app = new SpringApplication(ComiXedApp.class); app.run(args); } diff --git a/comixed-plugins/src/main/java/org/comixedproject/plugins/PluginManager.java b/comixed-plugins/src/main/java/org/comixedproject/plugins/PluginManager.java index 16fb7f299..a9499f6d3 100644 --- a/comixed-plugins/src/main/java/org/comixedproject/plugins/PluginManager.java +++ b/comixed-plugins/src/main/java/org/comixedproject/plugins/PluginManager.java @@ -76,7 +76,7 @@ public void afterPropertiesSet() throws Exception { public void loadPlugins() throws PluginException { log.debug("Clearing plugin list"); this.plugins.clear(); - File pluginDirectory = new File(this.pluginLocation); + var pluginDirectory = new File(this.pluginLocation); if (!pluginDirectory.exists()) { log.debug("Plugin directory does not exist: {}", pluginDirectory.getAbsolutePath()); return; @@ -87,7 +87,7 @@ public void loadPlugins() throws PluginException { Collection pluginFiles = FileUtils.listFiles(pluginDirectory, new String[] {"cxp"}, false); log.debug("Found {} file{} to process", pluginFiles.size(), pluginFiles.size() == 1 ? "" : "s"); - int processed = 0; + var processed = 0; for (File pluginFile : pluginFiles) { try (InputStream input = new BufferedInputStream(new FileInputStream(pluginFile))) { String fileType = this.fileTypeIdentifier.subtypeFor(input); @@ -115,14 +115,14 @@ private void loadPluginDetails(File pluginFile) throws PluginException { Map pluginEntries = new HashMap<>(); log.debug("opening archive"); - try (ZipFile zipfile = new ZipFile(pluginFile); ) { + try (var zipfile = new ZipFile(pluginFile); ) { log.debug("retrieving the list of archive entries"); Enumeration zipfileEntries = zipfile.getEntries(); while (zipfileEntries.hasMoreElements()) { ZipArchiveEntry zipfileEntry = zipfileEntries.nextElement(); String filename = zipfileEntry.getName(); long filesize = zipfileEntry.getSize(); - byte[] content = new byte[(int) filesize]; + var content = new byte[(int) filesize]; log.debug("Loading plugin file: {} ({} bytes)", filename, filesize); IOUtils.readFully(zipfile.getInputStream(zipfileEntry), content); pluginEntries.put(filename, content); @@ -132,7 +132,7 @@ private void loadPluginDetails(File pluginFile) throws PluginException { } log.debug("storing plugin details"); - Plugin plugin = this.pluginObjectFactory.getObject(); + var plugin = this.pluginObjectFactory.getObject(); plugin.setEntries(pluginEntries); if (this.plugins.containsKey(plugin.getName())) throw new PluginException("plugin already exists with name: " + plugin.getName()); diff --git a/comixed-plugins/src/main/java/org/comixedproject/plugins/interpreters/PluginInterpreterLoader.java b/comixed-plugins/src/main/java/org/comixedproject/plugins/interpreters/PluginInterpreterLoader.java index cf444539f..8e43fe212 100644 --- a/comixed-plugins/src/main/java/org/comixedproject/plugins/interpreters/PluginInterpreterLoader.java +++ b/comixed-plugins/src/main/java/org/comixedproject/plugins/interpreters/PluginInterpreterLoader.java @@ -59,7 +59,7 @@ public List getRuntime() { public void afterPropertiesSet() throws Exception { this.interpreters.clear(); log.debug("Loading plugin languages"); - for (int index = 0; index < this.runtimes.size(); index++) { + for (var index = 0; index < this.runtimes.size(); index++) { PluginInterpreterEntry entry = this.runtimes.get(index); if (entry.isValid()) { diff --git a/comixed-rest-api/src/main/java/org/comixedproject/auditlog/AuditableEndpointAspect.java b/comixed-rest-api/src/main/java/org/comixedproject/auditlog/AuditableEndpointAspect.java index a3306c895..463bbe0e0 100644 --- a/comixed-rest-api/src/main/java/org/comixedproject/auditlog/AuditableEndpointAspect.java +++ b/comixed-rest-api/src/main/java/org/comixedproject/auditlog/AuditableEndpointAspect.java @@ -59,14 +59,14 @@ public Object around(ProceedingJoinPoint joinPoint) throws Throwable { Throwable error = null; Object response = null; - final Date started = new Date(); + final var started = new Date(); try { response = joinPoint.proceed(); } catch (Throwable throwable) { error = throwable; } - final Date ended = new Date(); - final WebAuditLogEntry entry = new WebAuditLogEntry(); + final var ended = new Date(); + final var entry = new WebAuditLogEntry(); HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest(); @@ -90,8 +90,8 @@ public Object around(ProceedingJoinPoint joinPoint) throws Throwable { if (error != null) { log.debug("Storing method exception stacktrace"); - final StringWriter stringWriter = new StringWriter(); - final PrintWriter printWriter = new PrintWriter(stringWriter); + final var stringWriter = new StringWriter(); + final var printWriter = new PrintWriter(stringWriter); error.printStackTrace(printWriter); entry.setException(stringWriter.toString()); entry.setSuccessful(false); diff --git a/comixed-rest-api/src/main/java/org/comixedproject/authentication/CachingRequestBodyFilter.java b/comixed-rest-api/src/main/java/org/comixedproject/authentication/CachingRequestBodyFilter.java index 6d7a6ffcb..0499a2d3e 100644 --- a/comixed-rest-api/src/main/java/org/comixedproject/authentication/CachingRequestBodyFilter.java +++ b/comixed-rest-api/src/main/java/org/comixedproject/authentication/CachingRequestBodyFilter.java @@ -41,7 +41,7 @@ public void doFilter( ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest currentRequest = (HttpServletRequest) servletRequest; - ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(currentRequest); + var wrappedRequest = new ContentCachingRequestWrapper(currentRequest); chain.doFilter(wrappedRequest, servletResponse); } diff --git a/comixed-rest-api/src/main/java/org/comixedproject/authentication/ComiXedAuthenticationFilter.java b/comixed-rest-api/src/main/java/org/comixedproject/authentication/ComiXedAuthenticationFilter.java index 048ad48f2..9e1056b93 100644 --- a/comixed-rest-api/src/main/java/org/comixedproject/authentication/ComiXedAuthenticationFilter.java +++ b/comixed-rest-api/src/main/java/org/comixedproject/authentication/ComiXedAuthenticationFilter.java @@ -31,7 +31,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; @@ -71,7 +70,7 @@ protected void doFilterInternal( } else if (StringUtils.startsWith(header, BASIC_PREFIX)) { String base64Credentials = header.substring(BASIC_PREFIX.length()).trim(); byte[] credDecoded = Base64.getDecoder().decode(base64Credentials); - String credentials = new String(credDecoded, StandardCharsets.UTF_8); + var credentials = new String(credDecoded, StandardCharsets.UTF_8); String[] userDetails = credentials.split(":", 2); if (!userDetails[0].equals(USER_PREFIX)) { @@ -84,11 +83,11 @@ protected void doFilterInternal( if (!StringUtils.isEmpty(username) && (SecurityContextHolder.getContext().getAuthentication() == null)) { - UserDetails userDetails = this.userDetailsService.loadUserByUsername(username); + var userDetails = this.userDetailsService.loadUserByUsername(username); if (userDetails.getPassword().equals(password) || this.jwtTokenUtil.validateToken(authToken, userDetails)) { - UsernamePasswordAuthenticationToken authentication = + var authentication = new UsernamePasswordAuthenticationToken( userDetails, null, userDetails.getAuthorities()); authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); diff --git a/comixed-rest-api/src/main/java/org/comixedproject/authentication/ComiXedAuthenticationProvider.java b/comixed-rest-api/src/main/java/org/comixedproject/authentication/ComiXedAuthenticationProvider.java index fa3a8cad4..cd4d903a8 100644 --- a/comixed-rest-api/src/main/java/org/comixedproject/authentication/ComiXedAuthenticationProvider.java +++ b/comixed-rest-api/src/main/java/org/comixedproject/authentication/ComiXedAuthenticationProvider.java @@ -51,7 +51,7 @@ public class ComiXedAuthenticationProvider implements AuthenticationProvider { @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { String email = authentication.getName(); - String password = authentication.getCredentials().toString(); + var password = authentication.getCredentials().toString(); log.debug("Attempting to authenticate: email={}", email); diff --git a/comixed-rest-api/src/main/java/org/comixedproject/authentication/ComiXedUserDetailsService.java b/comixed-rest-api/src/main/java/org/comixedproject/authentication/ComiXedUserDetailsService.java index b2b7b3ff1..f6a15fcd9 100644 --- a/comixed-rest-api/src/main/java/org/comixedproject/authentication/ComiXedUserDetailsService.java +++ b/comixed-rest-api/src/main/java/org/comixedproject/authentication/ComiXedUserDetailsService.java @@ -56,8 +56,8 @@ public UserDetails loadUserByUsername(String email) throws UsernameNotFoundExcep UserBuilder result = User.withUsername(email); result.password(user.getPasswordHash()); - String[] roles = new String[user.getRoles().size()]; - for (int index = 0; index < user.getRoles().size(); index++) { + var roles = new String[user.getRoles().size()]; + for (var index = 0; index < user.getRoles().size(); index++) { roles[index] = user.getRoles().get(index).getName(); } result.roles(roles); diff --git a/comixed-rest-api/src/main/java/org/comixedproject/authentication/JwtTokenUtil.java b/comixed-rest-api/src/main/java/org/comixedproject/authentication/JwtTokenUtil.java index 028369731..8c97106ed 100644 --- a/comixed-rest-api/src/main/java/org/comixedproject/authentication/JwtTokenUtil.java +++ b/comixed-rest-api/src/main/java/org/comixedproject/authentication/JwtTokenUtil.java @@ -58,7 +58,7 @@ public Date getExpirationDateFromToken(String token) { } public T getClaimFromToken(String token, Function claimsResolver) { - final Claims claims = getAllClaimsFromToken(token); + final var claims = getAllClaimsFromToken(token); return claimsResolver.apply(claims); } @@ -67,7 +67,7 @@ private Claims getAllClaimsFromToken(String token) { } private Boolean isTokenExpired(String token) { - final Date expiration = getExpirationDateFromToken(token); + final var expiration = getExpirationDateFromToken(token); return expiration.before(new Date()); } @@ -77,7 +77,7 @@ public String generateToken(ComiXedUser user) { String doGenerateToken(String email) { - Claims claims = Jwts.claims().setSubject(email); + var claims = Jwts.claims().setSubject(email); List authorities = new ArrayList<>(); try { ComiXedUser user = this.userService.findByEmail(email); diff --git a/comixed-rest-api/src/main/java/org/comixedproject/controller/file/FileController.java b/comixed-rest-api/src/main/java/org/comixedproject/controller/file/FileController.java index 3fa52169b..d61cbc77e 100644 --- a/comixed-rest-api/src/main/java/org/comixedproject/controller/file/FileController.java +++ b/comixed-rest-api/src/main/java/org/comixedproject/controller/file/FileController.java @@ -19,7 +19,6 @@ package org.comixedproject.controller.file; import com.fasterxml.jackson.annotation.JsonView; -import java.io.File; import java.io.IOException; import java.util.List; import lombok.extern.log4j.Log4j2; @@ -27,15 +26,12 @@ import org.comixedproject.adaptors.archive.ArchiveAdaptorException; import org.comixedproject.auditlog.AuditableEndpoint; import org.comixedproject.handlers.ComicFileHandlerException; -import org.comixedproject.model.file.ComicFile; import org.comixedproject.model.net.GetAllComicsUnderRequest; import org.comixedproject.model.net.ImportComicFilesRequest; import org.comixedproject.model.net.comicfiles.LoadComicFilesResponse; -import org.comixedproject.service.comic.ComicService; import org.comixedproject.service.file.FileService; import org.comixedproject.task.QueueComicsTask; import org.comixedproject.task.runner.TaskManager; -import org.comixedproject.utils.ComicFileUtils; import org.comixedproject.views.View; import org.springframework.beans.factory.ObjectFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -53,7 +49,6 @@ @RequestMapping("/api/files") @Log4j2 public class FileController { - @Autowired private ComicService comicService; @Autowired private FileService fileService; @Autowired private TaskManager taskManager; @Autowired private ObjectFactory queueComicsWorkerTaskObjectFactory; @@ -88,22 +83,6 @@ public LoadComicFilesResponse loadComicFiles( return new LoadComicFilesResponse(this.fileService.getAllComicsUnder(directory, maximum)); } - private void getAllFilesUnder(File root, List result) throws IOException { - for (File file : root.listFiles()) { - if (file.isDirectory()) { - log.debug("Searching directory: " + file.getAbsolutePath()); - this.getAllFilesUnder(file, result); - } else { - - if (ComicFileUtils.isComicFile(file) - && (this.comicService.findByFilename(file.getCanonicalPath()) == null)) { - log.debug("Adding file: " + file.getCanonicalPath()); - result.add(new ComicFile(file.getCanonicalPath(), file.length())); - } - } - } - } - /** * Returns the content for the first image in the specified file. * diff --git a/comixed-rest-api/src/test/java/org/comixedproject/controller/file/FileControllerTest.java b/comixed-rest-api/src/test/java/org/comixedproject/controller/file/FileControllerTest.java index 7b08ae905..c1b205804 100644 --- a/comixed-rest-api/src/test/java/org/comixedproject/controller/file/FileControllerTest.java +++ b/comixed-rest-api/src/test/java/org/comixedproject/controller/file/FileControllerTest.java @@ -53,7 +53,6 @@ public class FileControllerTest { private static final byte[] IMAGE_CONTENT = new byte[65535]; private static final String TEST_DIRECTORY = "src/test"; private static final List TEST_FILENAMES = new ArrayList<>(); - private static final int TEST_IMPORT_STATUS = 129; private static final Integer TEST_LIMIT = RANDOM.nextInt(); private static final Integer TEST_NO_LIMIT = -1; private static final boolean TEST_DELETE_BLOCKED_PAGES = RANDOM.nextBoolean(); @@ -73,6 +72,19 @@ public class FileControllerTest { @Mock private QueueComicsTask queueComicsWorkerTask; @Mock private TaskManager taskManager; + @Test + public void testGetImportFileCoverServiceThrowsException() + throws ArchiveAdaptorException, ComicFileHandlerException { + Mockito.when(fileService.getImportFileCover(Mockito.anyString())) + .thenThrow(ComicFileHandlerException.class); + + final byte[] result = controller.getImportFileCover(COMIC_ARCHIVE); + + assertNotNull(result); + + Mockito.verify(fileService, Mockito.times(1)).getImportFileCover(COMIC_ARCHIVE); + } + @Test public void testGetImportFileCover() throws ArchiveAdaptorException, ComicFileHandlerException { Mockito.when(fileService.getImportFileCover(Mockito.anyString())).thenReturn(IMAGE_CONTENT); diff --git a/comixed-services/src/main/java/org/comixedproject/service/file/FileService.java b/comixed-services/src/main/java/org/comixedproject/service/file/FileService.java index 3e20c624e..74ba44aa5 100644 --- a/comixed-services/src/main/java/org/comixedproject/service/file/FileService.java +++ b/comixed-services/src/main/java/org/comixedproject/service/file/FileService.java @@ -29,7 +29,6 @@ import org.comixedproject.handlers.ComicFileHandlerException; import org.comixedproject.model.comic.Comic; import org.comixedproject.model.file.ComicFile; -import org.comixedproject.model.tasks.PersistedTaskType; import org.comixedproject.repositories.comic.ComicRepository; import org.comixedproject.service.task.TaskService; import org.comixedproject.utils.ComicFileUtils; @@ -42,6 +41,7 @@ public class FileService { @Autowired private ComicFileHandler comicFileHandler; @Autowired private ComicRepository comicRepository; @Autowired private TaskService taskService; + @Autowired private ComicFileUtils comicFileUtils; private int requestId = 0; @@ -116,16 +116,11 @@ private void loadFilesUnder( } private boolean canBeImported(final File file) throws IOException { - boolean isComic = ComicFileUtils.isComicFile(file); + boolean isComic = this.comicFileUtils.isComicFile(file); final String filePath = file.getCanonicalPath(); final Comic comic = this.comicRepository.findByFilename(filePath); return isComic && (comic == null); } - - public int getImportStatus() throws InterruptedException { - return this.taskService.getTaskCount(PersistedTaskType.ADD_COMIC) - + this.taskService.getTaskCount(PersistedTaskType.PROCESS_COMIC); - } } diff --git a/comixed-services/src/test/java/org/comixedproject/service/file/FileServiceTest.java b/comixed-services/src/test/java/org/comixedproject/service/file/FileServiceTest.java index a8a014117..c9d575e8a 100644 --- a/comixed-services/src/test/java/org/comixedproject/service/file/FileServiceTest.java +++ b/comixed-services/src/test/java/org/comixedproject/service/file/FileServiceTest.java @@ -30,6 +30,7 @@ import org.comixedproject.model.comic.Comic; import org.comixedproject.model.file.ComicFile; import org.comixedproject.repositories.comic.ComicRepository; +import org.comixedproject.utils.ComicFileUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; @@ -54,6 +55,7 @@ public class FileServiceTest { @InjectMocks private FileService service; @Mock private ComicFileHandler comicFileHandler; + @Mock private ComicFileUtils comicFileUtils; @Mock private ArchiveAdaptor archiveAdaptor; @Mock private ComicRepository comicRepository; @Mock private Comic comic; @@ -120,6 +122,7 @@ public void testGetAllComicsUnderWithFileSupplied() throws IOException { @Test public void testGetAllComicsAlreadyImported() throws IOException { + Mockito.when(comicFileUtils.isComicFile(Mockito.any(File.class))).thenReturn(true); Mockito.when(comicRepository.findByFilename(Mockito.anyString())).thenReturn(comic); final List result = service.getAllComicsUnder(TEST_ROOT_DIRECTORY, TEST_LIMIT); @@ -133,6 +136,8 @@ public void testGetAllComicsAlreadyImported() throws IOException { @Test public void testGetAllComicsUnderWithLimit() throws IOException { + Mockito.when(comicFileUtils.isComicFile(Mockito.any(File.class))).thenReturn(true); + final List result = service.getAllComicsUnder(TEST_ROOT_DIRECTORY, TEST_LIMIT); assertNotNull(result); @@ -142,6 +147,8 @@ public void testGetAllComicsUnderWithLimit() throws IOException { @Test public void testGetAllComicsUnder() throws IOException { + Mockito.when(comicFileUtils.isComicFile(Mockito.any(File.class))).thenCallRealMethod(); + final List result = service.getAllComicsUnder(TEST_ROOT_DIRECTORY, TEST_NO_LIMIT); assertNotNull(result); diff --git a/comixed-tasks/src/main/java/org/comixedproject/task/MoveComicTask.java b/comixed-tasks/src/main/java/org/comixedproject/task/MoveComicTask.java index 2f4b6a4a2..93544f75b 100644 --- a/comixed-tasks/src/main/java/org/comixedproject/task/MoveComicTask.java +++ b/comixed-tasks/src/main/java/org/comixedproject/task/MoveComicTask.java @@ -27,7 +27,6 @@ import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.comixedproject.model.comic.Comic; -import org.comixedproject.service.comic.ComicService; import org.comixedproject.state.comic.ComicEvent; import org.comixedproject.state.comic.ComicStateHandler; import org.comixedproject.utils.ComicFileUtils; @@ -51,8 +50,8 @@ public class MoveComicTask extends AbstractTask { private static final String FORBIDDEN_PROPERTY_CHARACTERS = "[\"':\\\\/*?|<>]"; private static final String UNKNOWN_VALUE = "Unknown"; - @Autowired private ComicService comicService; @Autowired private ComicStateHandler comicStateHandler; + @Autowired private ComicFileUtils comicFileUtils; @Getter @Setter private Comic comic; @Getter @Setter private String targetDirectory; @@ -72,7 +71,8 @@ public void startTask() throws TaskException { String defaultExtension = FilenameUtils.getExtension(comic.getFilename()); destFile = new File( - ComicFileUtils.findAvailableFilename(destFile.getAbsolutePath(), 0, defaultExtension)); + this.comicFileUtils.findAvailableFilename( + destFile.getAbsolutePath(), 0, defaultExtension)); // if the source and target are the same, then skip the file if (destFile.equals(sourceFile)) {