@Override public void onException(URLConnection connection, IOException e) { URL url = entry.url; if (connection instanceof HttpURLConnection) { int responseCode; try { responseCode = ((HttpURLConnection) connection).getResponseCode(); if (responseCode >= 400 && responseCode < 500) { // CS-IGNORE // url is not local cache cachedImages.put(entry.getImageUrl(), new ErrorImageEntry(url, e)); if (responseCode == HttpURLConnection.HTTP_NOT_FOUND) { logger.warn("not found: url={}", url); } else { logger.warn("Error while fetching: url={}, statusCode={}", url, responseCode, e); } } else { logger.warn("Error while fetching: url={}, statusCode={}", url, responseCode, e); } } catch (IOException responseCodeException) { logger.warn("Cannot retrieve http status code", responseCodeException); } } else { logger.warn("Error while fetching: {}", url, e); } if (entry.getAlternateEntry() != null) { entry = entry.getAlternateEntry(); configuration.addJob(this); } }
@Override public void run() { try { fetchImage(entry); ImageSetter setter = entry.getSetter(); if (setter != null) { setter.setImageRecursively(entry.imageEntry.image); } fetchEntryMap.remove(entry.getImageUrl()); } catch (InterruptedException e) { logger.warn("Interrupted: {}", entry.url); } }
/** * 画像を取得する。 * * @param entry イメージエントリ * @throws java.lang.InterruptedException interrupted */ protected void fetchImage(FetchEntry entry) throws InterruptedException { synchronized (entry) { if (entry.isFinished()) { return; } byte[] imageData = NetworkSupport.fetchContents(entry.connectionInfo); ImageEntry imageEntry = entry.imageEntry; imageEntry.rawData = imageData; imageEntry.image = Toolkit.getDefaultToolkit().createImage(imageData); cachedImages.put(entry.getImageUrl(), entry.imageEntry); configuration.addJob(JobQueue.PRIORITY_IDLE, new ImageFlusher(imageEntry)); } }