/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.gui.resources.internal; import java.util.HashMap; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Image; import de.rcenvironment.core.gui.resources.api.ImageManager; import de.rcenvironment.core.gui.resources.api.ImageSource; /** * Standard {@link ImageManager} implementation. * * @author Robert Mischke */ public class ImageManagerImpl extends ImageManager { private final Map<ImageSource, Image> sharedImages = new HashMap<>(); private final Log log = LogFactory.getLog(getClass()); public ImageManagerImpl() { log.debug("Image manager initialized"); } @Override public Image getSharedImage(ImageSource source) { synchronized (sharedImages) { Image image = sharedImages.get(source); if (image == null) { // TODO handle image failures explicitly? image = source.getImageDescriptor().createImage(); sharedImages.put(source, image); } return image; } } @Override public ImageDescriptor getImageDescriptor(ImageSource source) { return source.getImageDescriptor(); } @Override public byte[] getImageBytes(ImageSource source) { log.debug("Providing raw image data for " + source); // TODO this probably parses the image data (needlessly); optimize if called often return source.getImageDescriptor().getImageData().data; } @Override public void dispose() { synchronized (sharedImages) { log.debug("Disposing " + sharedImages.values().size() + " shared images"); for (Image image : sharedImages.values()) { image.dispose(); } sharedImages.clear(); } log.debug("Image manager disposed"); } }