/** * <copyright> * </copyright> * * */ package org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui; /** * A provider class for all images that are required by the generated UI plug-in. * The default implementation load images from the bundle and caches them to make * sure each image is loaded at most once. */ public class MtextImageProvider { public final static MtextImageProvider INSTANCE = new MtextImageProvider(); private java.util.Map<String, org.eclipse.swt.graphics.Image> imageCache = new java.util.LinkedHashMap<String, org.eclipse.swt.graphics.Image>(); /** * Returns the image associated with the given key. The key can be either a path * to an image file in the resource bundle or a shared image from * org.eclipse.ui.ISharedImages. */ public org.eclipse.swt.graphics.Image getImage(String key) { if (key == null) { return null; } org.eclipse.swt.graphics.Image image = null; // try shared images try { java.lang.reflect.Field declaredField = org.eclipse.ui.ISharedImages.class.getDeclaredField(key); Object valueObject = declaredField.get(null); if (valueObject instanceof String) { String value = (String) valueObject; image = org.eclipse.ui.PlatformUI.getWorkbench().getSharedImages().getImage(value); } } catch (java.lang.SecurityException e) { } catch (java.lang.NoSuchFieldException e) { } catch (java.lang.IllegalArgumentException e) { } catch (java.lang.IllegalAccessException e) { } if (image != null) { return image; } // try cache if (imageCache.containsKey(key)) { return imageCache.get(key); } // try loading image from UI bundle org.eclipse.jface.resource.ImageDescriptor descriptor = getImageDescriptor(key); if (descriptor == null) { return null; } image = descriptor.createImage(); if (image == null) { return null; } imageCache.put(key, image); return image; } public org.eclipse.jface.resource.ImageDescriptor getImageDescriptor(String key) { org.eclipse.core.runtime.IPath path = new org.eclipse.core.runtime.Path(key); org.eclipse.jface.resource.ImageDescriptor descriptor = org.eclipse.jface.resource.ImageDescriptor.createFromURL(org.eclipse.core.runtime.FileLocator.find(org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextUIPlugin.getDefault().getBundle(), path, null)); if (org.eclipse.jface.resource.ImageDescriptor.getMissingImageDescriptor().equals(descriptor) || descriptor == null) { // try loading image from any bundle try { // possible URLs: // platform:/plugin/your.plugin/icons/yourIcon.png // bundleentry://557.fwk3560063/icons/yourIcon.png java.net.URL pluginUrl = new java.net.URL(key); descriptor = org.eclipse.jface.resource.ImageDescriptor.createFromURL(pluginUrl); if (org.eclipse.jface.resource.ImageDescriptor.getMissingImageDescriptor().equals(descriptor) || descriptor == null) { return null; } } catch (java.net.MalformedURLException mue) { org.feature.multi.perspective.mapping.viewmapping.resource.mtext.ui.MtextUIPlugin.logError("IconProvider can't load image (URL is malformed).", mue); } } return descriptor; } }