package com.c2kernel.gui; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Hashtable; import javax.swing.ImageIcon; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.process.Gateway; import com.c2kernel.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(); } }