From 5e4034b5cba89460a62fa958fc78c2b85acb3d5f Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 7 Oct 2014 09:18:33 +0200 Subject: Repackage to org.cristalise --- src/main/java/org/cristalise/gui/ImageLoader.java | 74 +++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/main/java/org/cristalise/gui/ImageLoader.java (limited to 'src/main/java/org/cristalise/gui/ImageLoader.java') diff --git a/src/main/java/org/cristalise/gui/ImageLoader.java b/src/main/java/org/cristalise/gui/ImageLoader.java new file mode 100644 index 0000000..9af6fed --- /dev/null +++ b/src/main/java/org/cristalise/gui/ImageLoader.java @@ -0,0 +1,74 @@ +package org.cristalise.gui; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Hashtable; + +import javax.swing.ImageIcon; + +import org.cristalise.kernel.common.ObjectNotFoundException; +import org.cristalise.kernel.process.Gateway; +import org.cristalise.kernel.utils.Logger; + + +public class ImageLoader { + + static private Hashtable imgCache = new Hashtable(); + static public final ImageIcon nullImg = new ImageIcon(new byte[] { 0 }); + static private final ArrayList reportedMissingIcons = new ArrayList(); + + /** + * Gets an image from the resource directories + * + * @param resName - filename after resources/images + * @return + */ + static public ImageIcon findImage(String resName) { + try { + for (String ns : Gateway.getResource().getModuleBaseURLs().keySet()) { + try { + return getImage(ns, resName); + } catch (ObjectNotFoundException ex) { } + } + return getImage(null, resName); + } catch (ObjectNotFoundException ex) { + if (!reportedMissingIcons.contains(resName)) { + Logger.warning("Image '"+resName+"' not found. Using null icon"); + reportedMissingIcons.add(resName); + } + return nullImg; + } + } + + static public ImageIcon getImage(String ns, String resName) throws ObjectNotFoundException { + if (resName == null) + return nullImg; + + if (imgCache.containsKey(ns+'/'+resName)) { + return imgCache.get(ns+'/'+resName); + } + + URL imgLocation = null; + if (ns == null) + try { + imgLocation = Gateway.getResource().getKernelResourceURL("images/"+resName); + } catch (MalformedURLException ex) { } + else + try { + imgLocation = Gateway.getResource().getModuleResourceURL(ns, "images/"+resName); + } catch (MalformedURLException ex) { } + + if (imgLocation!= null) { + ImageIcon newImg = new ImageIcon(imgLocation); + + if (newImg.getIconHeight() > -1) { + imgCache.put(ns+'/'+resName, newImg); + Logger.msg(3, "Loaded "+resName+" "+newImg.getIconWidth()+"x"+newImg.getIconHeight()); + return newImg; + } + } + throw new ObjectNotFoundException(); + } + +} -- cgit v1.2.3