package com.marinilli.b2.c11.util;
import javax.swing.ImageIcon;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.jnlp.UnavailableServiceException;
import javax.jnlp.ServiceManager;
import javax.jnlp.BasicService;
import java.util.ResourceBundle;
/**
 * Chapter 11 - Utilities
 * @author Mauro Marinilli
 * @version 1.0
 */
public class Utilities {
  private static Utilities util;
  private static ClassLoader loader;
  private static BasicService basicService;
  private static ImageIcon EMPTY_ICON =
    new ImageIcon(new BufferedImage(24,24,BufferedImage.TYPE_INT_RGB));
  private ResourceBundle msg;
  private static String bundleFilename = "messages";
  private Utilities() {
    loader = getClass().getClassLoader();
    basicService =
      (BasicService)getService("javax.jnlp.BasicService");
    initializeDefaultResources();
    try {
      msg = ResourceBundle.getBundle(bundleFilename);
    } catch (java.util.MissingResourceException mre) {
      msg = null;
      System.out.println("Utilities (init) Couldn't find any resource bundle.");
    }
  }
  private void initializeDefaultResources() {
    //initializes the empty icon
    java.awt.Graphics g = EMPTY_ICON.getImage().getGraphics();
    g.drawLine(8,8,16,16);
    g.drawLine(8,16,16,8);
  }
  public static ClassLoader getClassLoader(){
    if (util==null)
      getInstance();
    return loader;
  }
  public static ImageIcon getImageIcon(String name){
    if (util==null)
      getInstance();
    URL res = loader.getResource(name);
    if (res!=null)
      return new ImageIcon(res);
    return EMPTY_ICON;
  }
  public static Object getService(String fullyQName){
    Object service = null;
    try {
      service = ServiceManager.lookup(fullyQName);
    } catch (UnavailableServiceException use) {
      System.out.println(util.getClass()+"getService("+ fullyQName +") "+use);
    }
    return service;
  }
  public static BasicService getBasicService(){
    if (util==null)
      getInstance();
    return basicService;
  }
  public static String getMsg(String key){
    if (util==null)
      getInstance();
    if (util.msg!=null) {
      String m = util.msg.getString(key);
      if (m!=null)
        return m;
    }
    return "";
  }
  public static Utilities getInstance(){
    if (util==null)
      util = new Utilities();
    return util;
  }
  public static Utilities getInstance(String resourceBundleName){
    bundleFilename = resourceBundleName;
    if (util==null)
      getInstance();
    else
      System.out.println(util.getClass()+" getInstance must be invoked as initializator.");
    return util;
  }
}