/**
 * Copyright (c) 2005-2006 IBM Corporation and others.
 * All rights reserved.   This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v20.html
 * 
 * Contributors: 
 *   IBM - Initial API and implementation
 */
package org.eclipse.emf.common.ui;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.MissingResourceException;

import org.eclipse.ui.plugin.AbstractUIPlugin;

import org.eclipse.emf.common.CommonPlugin;
import org.eclipse.emf.common.EMFPlugin;
import org.eclipse.emf.common.util.Logger;
import org.eclipse.emf.common.util.ResourceLocator;
import org.eclipse.emf.common.util.WrappedException;

/**
 * An Eclipse <b>AbstractUIPlugin</b> implementation base to be used within UI plug-ins.
 * @since 2.2.0
 */
public abstract class EclipseUIPlugin extends AbstractUIPlugin implements ResourceLocator, Logger, EMFPlugin.InternalEclipsePlugin
{
  /**
   * The EMF plug-in APIs are all delegated to this helper, so that code can be shared by plug-in
   * implementations with a different platform base class (e.g. Plugin).
   */
  protected EMFPlugin.InternalHelper helper;

  /**
   * Creates an instance.
   */
  public EclipseUIPlugin()
  {
    super();
    helper = new EMFPlugin.InternalHelper(this);
  }

  /**
   * Return the plugin ID.
   */
  public String getSymbolicName()
  {
    return helper.getSymbolicName();
  }

  /*
   * Javadoc copied from interface.
   */
  public URL getBaseURL()
  {
    return helper.getBaseURL();
  }

  /*
   * Javadoc copied from interface.
   */
  public Object getImage(String key)
  {
    try
    {
      return doGetImage(key);
    }
    catch (MalformedURLException exception)
    {
      throw new WrappedException(exception);
    }
    catch (IOException exception)
    {
      throw 
        new MissingResourceException
          (CommonPlugin.INSTANCE.getString("_UI_StringResourceNotFound_exception", new Object [] { key }),
           getClass().getName(), 
           key);
    }
  }

  /**
   * Does the work of fetching the image associated with the key.
   * It ensures that the image exists.
   * @param key the key of the image to fetch.
   * @exception IOException if an image doesn't exist.
   * @return the description of the image associated with the key.
   */
  protected Object doGetImage(String key) throws IOException
  {
    return helper.getImage(key);
  }

  public String getString(String key)
  {
    return helper.getString(key, true);
  }
  
  public String getString(String key, boolean translate)
  {
    return helper.getString(key, translate);
  }

  public String getString(String key, Object [] substitutions)
  {
    return helper.getString(key, substitutions, true);
  }

  public String getString(String key, Object [] substitutions, boolean translate)
  {
    return helper.getString(key, substitutions, translate);
  }

  public void log(Object logEntry)
  {
    helper.log(logEntry);
  }  
}
