private FetchEntry getFetchEntry(String urlString, URL url) { ImageEntry imageEntry = new ImageEntry(urlString); String hash = toHexString(shaHash.get().digest(urlString.getBytes(ClientConfiguration.UTF8_CHARSET))); String cacheFileName = getCacheFileName(hash, urlString); imageEntry.cacheFile = Paths.get(cacheFileName); // from url FetchEntry fetchEntry = new FetchEntry(imageEntry); fetchEntry.url = url; // from cache Path cachePath = Paths.get(cacheFileName); if (Files.exists(cachePath)) { FetchEntry cacheFetchEntry = new FetchEntry(imageEntry); try { cacheFetchEntry.url = cachePath.toUri().toURL(); } catch (MalformedURLException e) { throw new AssertionError(e); } cacheFetchEntry.setAlternateEntry(fetchEntry); fetchEntry = cacheFetchEntry; } else { logger.debug("Cache miss: {}", urlString); } return fetchEntry; }