package org.freehep.application.studio.pluginmanager; import java.awt.GridLayout; import java.io.ByteArrayOutputStream; import java.io.EOFException; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.SwingUtilities; /** * * @author Tony Johnson (tonyj@slac.stanford.edu) * @version $Id: PluginDownload.java 8584 2006-08-10 23:06:37Z duns $ */ class PluginDownload extends JPanel implements Runnable { private Map files; private Map downloads; private Throwable status; PluginDownload(Map files) { super(new GridLayout(4,1)); this.files = files; int n = files.size(); label1 = new JLabel("File 1/"+n); label2 = new JLabel("Downloading ..."); progress1 = new JProgressBar(0,n); progress2 = new JProgressBar(); add(label1); add(progress1); add(label2); add(progress2); } Throwable getStatus() { return status; } void cleanUp() { downloads = null; } void commit() { try { System.out.println("commit"+downloads.size()); for (Iterator iter = downloads.entrySet().iterator(); iter.hasNext(); ) { Map.Entry entry = (Map.Entry) iter.next(); ByteArrayOutputStream bytes = (ByteArrayOutputStream) entry.getValue(); System.out.println("file="+entry.getKey()); OutputStream out = new FileOutputStream((File) entry.getKey()); bytes.writeTo(out); out.close(); } } catch (IOException x) { x.printStackTrace(); } finally { downloads = null; } } public void run() { try { downloads = new HashMap(); Iterator iter = files.entrySet().iterator(); for (int i=0; iter.hasNext(); i++) { Map.Entry entry = (Map.Entry) iter.next(); final URL url = new URL(entry.getValue().toString()); SwingUtilities.invokeLater(new Update(i,url)); java.net.URLConnection connect = url.openConnection(); InputStream in = connect.getInputStream(); byte[] buffer = new byte[8196]; OutputStream out = new ByteArrayOutputStream(); try { for (;;) { int l = in.read(buffer); if (l<0) break; out.write(buffer,0,l); } out.close(); downloads.put(entry.getKey(),out); } catch (EOFException x) { } finally { in.close(); } } } catch (Throwable t) { status = t; } finally { System.out.println("Download finished"); SwingUtilities.invokeLater(new Update(files.size(),null)); } } private class Update implements Runnable { private int n; private URL url; Update(int n, URL url) { this.n = n; this.url = url; } public void run() { label1.setText("File "+(n+1)+"/"+files.size()); progress1.setValue(n); if (url == null) { JDialog dlg = (JDialog) SwingUtilities.getAncestorOfClass(JDialog.class,PluginDownload.this); System.out.println("dlg="+dlg); if (dlg != null) dlg.dispose(); } else label2.setText("Downloading "+url+"..."); } } private JLabel label1; private JLabel label2; private JProgressBar progress1; private JProgressBar progress2; }