package com.netifera.platform.ui.images;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DecorationOverlayIcon;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.plugin.AbstractUIPlugin;
public class ImageCache {
private final Map<ImageDescriptor, Image> imageMap = new HashMap<ImageDescriptor, Image>();
private final String pluginId;
public ImageCache(String id) {
pluginId = id;
}
public Image get(String key) {
return get(getDescriptor(key));
}
public ImageDescriptor getDescriptor(String key) {
return AbstractUIPlugin.imageDescriptorFromPlugin(pluginId, key);
}
public Image get(ImageDescriptor descriptor) {
if (descriptor == null) {
return null;
}
synchronized (imageMap) {
/* if descriptor not contained in map create image and put it */
if (!imageMap.containsKey(descriptor)) {
imageMap.put(descriptor, descriptor.createImage());
}
return imageMap.get(descriptor);
}
}
public Image getDecorated(String key, String overlayKeys[]) {
Image baseImage = get(key);
if (baseImage == null) {
return null;
}
ImageDescriptor[] overlays = new ImageDescriptor[5];
for (int i=0; i<5; i++)
if (overlayKeys[i] != null) {
overlays[i] = getDescriptor(overlayKeys[i]);
}
for (ImageDescriptor any: overlays)
if (any != null) {
ImageDescriptor descriptor = new DecorationOverlayIcon(baseImage, overlays);
return get(descriptor);
}
return baseImage;
}
public synchronized void dispose() {
for (Image image : imageMap.values()) {
image.dispose();
}
imageMap.clear();
}
}