package org.eclipse.ote.ui.util;

import java.util.logging.Level;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.ui.swt.ImageManager;
import org.eclipse.osee.framework.ui.swt.KeyedImage;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Display;

/**
 * Put an instance of this in your KeyedImage and reference its overridden methods as pass throughs.
 * Image files should go in <project>/images
 */
public class KeyedImageHelper {

   private final String fileName;
   private final String plugin;

   /**
    * @param plugin The PLUGIN_ID of your activator. NOTE: this should match the actual project pathname.
    * @param fileName The name of the file
    */
   public KeyedImageHelper(String plugin, String fileName) {
      this.fileName = fileName;
      this.plugin = plugin;
   }

   public ImageDescriptor createImageDescriptor() {
      ImageDescriptor imageDesc = null;
      try {
         imageDesc = ImageManager.createImageDescriptor(plugin, "images", fileName);
      } catch (Throwable th) {
         try {
            imageDesc = new ImageDescriptor() {
               @Override
               public ImageData getImageData() {
                  return new ImageData(getPluginFilename());
               }
            };
         } catch (Throwable th2) {
            OseeLog.log(getClass(), Level.SEVERE, th);
         }
      }
      return imageDesc;
   }

   public String getImageKey() {
      return plugin + ".images." + fileName;
   }

   public Image getImage(KeyedImage keyedImage) {
      Image image = null;
      try {
         image = ImageManager.getImage(keyedImage);
      } catch (NullPointerException e) {
         try {
            image = new Image(Display.getDefault(), getPluginFilename());
         } catch (Throwable ignored) {
            throw e;
         }
      }
      return image;
   }

   private String getPluginFilename() {
      return "../"+plugin+"/images/"+fileName;
   }
}
