package util; import gui.intro.Login_GUI; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.net.URL; import javax.swing.ImageIcon; import org.apache.log4j.Logger; /** * Helper class for loading resources. * This should be error safe loaders with a fall back in case the * requested resource can't be found, or isn't of the expected type. */ public class ResourceLoader { /** * Logger for this class */ private final static Logger LOGGER = Logger.getLogger(ResourceLoader.class); /** * Load the given resource as an ImageIcon. * This is guaranteed to never throw an Exception and always return * an ImageIcon. If the requested resource could not be loaded, * an icon is generated, containing an error message. If even that * fails, an empty icon is returned. * @param path Resource path to load * @param description Icon description * @return ImageIcon instance */ public static ImageIcon getIcon(String path, String description) { URL url = ResourceLoader.class.getResource(path); if (url == null) { LOGGER.error("Resource not found: " + path); } else { try { return new ImageIcon(url, description); } catch (Exception e) { LOGGER.error("Resource not loadable: " + path); } } // If we reach here loading failed, create image containing error // message try { return errorIcon("Invalid Resource: " + path); } catch (Throwable t) { return new ImageIcon(); } } /** * Load the given resource as an ImageIcon. * This is guaranteed to never throw an Exception and always return * an ImageIcon. If the requested resource could not be loaded, * an icon is generated, containing an error message. If even that * fails, an empty icon is returned. * @param path Resource path to load * @return ImageIcon instance */ public static ImageIcon getIcon(String path) { return getIcon(path, path); } /** * Helper that will create an icon with given text. * @param errorText Text to render to icon * @return the icon */ private static ImageIcon errorIcon(String errorText) { Font font = new Font("Tahoma", Font.PLAIN, 20); // get dimensions of text FontRenderContext frc = new FontRenderContext(null, true, true); Rectangle2D bounds = font.getStringBounds(errorText, frc); int w = (int) bounds.getWidth(); int h = (int) bounds.getHeight(); // create a BufferedImage object BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); // set color and other parameters g.setColor(Color.WHITE); g.fillRect(0, 0, w, h); g.setColor(Color.RED); g.setFont(font); g.drawString(errorText, (float) bounds.getX(), (float) -bounds.getY()); g.dispose(); return new ImageIcon(image, "ERROR"); } }