/**
 * Created on Jun 18, 2005
 * $id:  $
 */
package org.jvnet.lookout.ui.google.desktop;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.jvnet.lookout.ui.core.ImageDescriptorProvider;
import org.jvnet.lookout.ui.core.preference.Cleanable;
import org.osgi.framework.BundleContext;

/**
 * The main plugin class to be used in the desktop.
 */
public class Plugin extends AbstractUIPlugin implements ImageDescriptorProvider {

    // The shared instance.
    private static Plugin plugin;
    private static final String PLUGIN_ID = Plugin.class.getPackage().getName();
    
    // Resource bundle.
    private ResourceBundle resourceBundle;
    private List<Cleanable> cleanables;

    
    /**
     * The constructor.
     */
    public Plugin() {
        super();
        plugin = this;       
        cleanables = new ArrayList<Cleanable>(2);
    }

    /**
     * This method is called upon plug-in activation
     */
    public void start(BundleContext context) throws Exception {
        super.start(context);        
    }

    /**
     * This method is called when the plug-in is stopped
     */
    public void stop(BundleContext context) throws Exception {
        
    	//Need to give a chance to any cleanable to cleanup.
    	for (Iterator iter = cleanables.iterator(); iter.hasNext();) {
			((Cleanable) iter.next()).clean();			
		}
    	
    	//Now shutdown...
        super.stop(context);
        
        plugin = null;
        resourceBundle = null;
        cleanables = null;
    }

    public void addCleanable(Cleanable cleanable) {
    	cleanables.add(cleanable);
    }
    
    /**
     * Returns the shared instance.
     */
    public static Plugin getDefault() {
        return plugin;
    }

    /**
     * Returns the string from the plugin's resource bundle, or 'key' if not
     * found.
     */
    public static String getResourceString(String key) {
        ResourceBundle bundle = Plugin.getDefault().getResourceBundle();
        try {
            return (bundle != null) ? bundle.getString(key) : key;
        } catch (MissingResourceException e) {
            return key;
        }
    }

    /**
     * Returns the plugin's resource bundle,
     */
    public ResourceBundle getResourceBundle() {
        try {
            if (resourceBundle == null)
                resourceBundle = ResourceBundle.getBundle(PLUGIN_ID + ".PluginResources");
        } catch (MissingResourceException x) {
            resourceBundle = null;
        }
        return resourceBundle;
    }

    /**
     * Returns an image descriptor for the image file at the given plug-in
     * relative path.
     * 
     * @param path the path
     * @return the image descriptor
     */
    public ImageDescriptor getImageDescriptor(String path) {
        return AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, path);
    }
    
}
