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));
}
}
}