/*
* {{{ header & license
* Copyright (c) 2008 Patrick Wright
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
* }}}
*/
package org.xhtmlrenderer.experimental;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.event.IIOReadProgressListener;
import javax.imageio.stream.ImageInputStream;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
* @author patrick
*/
public class ImageLoader {
private JFrame frame;
private JPanel panel;
private WorkQueue queue;
public static void main(String[] args) {
new ImageLoader().run();
}
private void run() {
queue = new WorkQueue(5);
final List imageUrls = buildImageUrlList();
EventQueue.invokeLater(new Runnable() {
public void run() {
panel = new JPanel();
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(BorderLayout.CENTER, panel);
frame.pack();
frame.setSize(800, 600);
frame.setVisible(true);
startImageLoading(imageUrls);
}
});
}
private void startImageLoading(final List imageUrls) {
for (Iterator it = imageUrls.iterator(); it.hasNext();) {
final String url = (String) it.next();
queue.queueTask(new ImageLoadRunnable(url));
}
}
private void addImageIcon(final BufferedImage img) {
EventQueue.invokeLater(new Runnable() {
public void run() {
panel.add(new JLabel(new ImageIcon(img)));
panel.validate();
}
});
}
private List buildImageUrlList() {
return Arrays.asList(new String[]{
"http://webcvs.freedesktop.org/tango/tango-icon-theme/32x32/actions/address-book-new.png?view=co",
"http://webcvs.freedesktop.org/tango/tango-icon-theme/32x32/actions/appointment-new.png?view=co",
"http://webcvs.freedesktop.org/tango/tango-icon-theme/32x32/actions/contact-new.png?view=co",
"http://webcvs.freedesktop.org/tango/tango-icon-theme/32x32/actions/bookmark-new.png?view=co"
});
}
private class ImageLoadRunnable implements Runnable {
private final String urlString;
public ImageLoadRunnable(String urlString) {
this.urlString = urlString;
}
public void run() {
try {
final URL url = new URL(urlString);
final URLConnection connection = url.openConnection();
BufferedInputStream in = new BufferedInputStream(connection.getInputStream());
final ImageInputStream stream = ImageIO.createImageInputStream(in);
final Iterator readers = ImageIO.getImageReaders(stream);
final ImageReader reader = (ImageReader) readers.next();
IIOReadProgressListener progressListener = new IIOReadProgressListener() {
public void sequenceStarted(ImageReader imageReader, int i) {
}
public void sequenceComplete(ImageReader imageReader) {
}
public void imageStarted(ImageReader imageReader, int i) {
}
public void imageProgress(ImageReader imageReader, float v) {
}
public void imageComplete(ImageReader imageReader) {
System.out.println(" complete " + url);
}
public void thumbnailStarted(ImageReader imageReader, int i, int i1) {
}
public void thumbnailProgress(ImageReader imageReader, float v) {
}
public void thumbnailComplete(ImageReader imageReader) {
}
public void readAborted(ImageReader imageReader) {
System.out.println("ABORT " + url);
}
};
reader.addIIOReadProgressListener(progressListener);
reader.setInput(stream, true);
BufferedImage img = reader.read(0);
addImageIcon(img);
} catch (IOException e) {
System.err.println("Can't load image URL " + urlString + ": " + e.getMessage());
}
}
public String toString() {
return "ImageLoad: " + urlString;
}
}
}