| URLOpener |

    package ij.plugin;
    import java.awt.*;
    import java.io.*;
    import java.net.URL;
    import ij.*;
    import ij.io.*;
    import ij.gui.*;
    import ij.plugin.frame.Editor;

    /** Opens TIFFs, ZIP compressed TIFFs, DICOMs, GIFs and JPEGs using a URL.
        TIFF file names must end in ".tif", ZIP file names must end
        in ".zip" and DICOM file names must end in ".dcm".
        Opens a Web page in the default browser if the URL ends with "/".
    */
    public class URLOpener implements PlugIn {

        private static String url = "http://rsb.info.nih.gov/ij/images/clown.gif";

        /** If 'urlOrName' is a URL, opens the image at that URL. If it is
            a file name, opens the image with that name from the 'images.location'
            URL in IJ_Props.txt. If it is blank, prompts for an image
            URL and open the specified image. */
        public void run(String urlOrName) {
            if (!urlOrName.equals("")) {
                if (urlOrName.endsWith("StartupMacros.txt"))
                    openTextFile(urlOrName, true);
                else {
                    String url = urlOrName.indexOf("://")>0?urlOrName:Prefs.getImagesURL()+urlOrName;
                    ImagePlus imp = new ImagePlus(url);
                    if (imp.getType()==ImagePlus.COLOR_RGB)
                        Opener.convertGrayJpegTo8Bits(imp);
                    WindowManager.checkForDuplicateName = true;
                    FileInfo fi = imp.getOriginalFileInfo();
                    if (fi!=null && fi.fileType==FileInfo.RGB48)
                        imp = new CompositeImage(imp, 3);
                    imp.show();
                }
                return;
            }

            GenericDialog gd = new GenericDialog("Enter a URL");
            gd.addMessage("Enter URL of a TIFF, JPEG, GIF, PNG or DICOM image");
            gd.addStringField("URL:", url, 40);
            gd.showDialog();
            if (gd.wasCanceled())
                return;
            url = gd.getNextString();
            url = url.trim();
            if (url.indexOf("://")==-1)
                url = "http://" + url;
            if (url.endsWith("/"))
                IJ.runPlugIn("ij.plugin.BrowserLauncher", url.substring(0, url.length()-1));
            else if (url.endsWith(".html") || url.endsWith(".htm") ||  url.indexOf(".html#")>0)
                IJ.runPlugIn("ij.plugin.BrowserLauncher", url);
            else if (url.endsWith(".txt")||url.endsWith(".ijm"))
                openTextFile(url, false);
            else {
                IJ.showStatus("Opening: " + url);
                ImagePlus imp = new ImagePlus(url);
                WindowManager.checkForDuplicateName = true;
                FileInfo fi = imp.getOriginalFileInfo();
                if (fi!=null && fi.fileType==FileInfo.RGB48)
                    imp = new CompositeImage(imp, 3);
                imp.show();
                IJ.showStatus("");
            }
            IJ.register(URLOpener.class);  // keeps this class from being GC'd
        }

        void openTextFile(String urlString, boolean install) {
            StringBuffer sb = null;
            try {
                URL url = new URL(urlString);
                InputStream in = url.openStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(in));
                sb = new StringBuffer() ;
                String line;
                while ((line=br.readLine()) != null)
                    sb.append (line + "\n");
                in.close ();
            } catch (IOException e) {
                if  (!(install&&urlString.endsWith("StartupMacros.txt")))
                    IJ.error("URL Opener", ""+e);
                sb = null;
            }
            if (sb!=null) {
                if (install)
                    (new MacroInstaller()).install(new String(sb));
                else
                    (new Editor()).create(urlString, new String(sb));
            }
        }

    }

| URLOpener |