/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.components.parametricstudy.gui.view; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; /** * The {@link BundleActivator} of this bundle. Responsibilities: * <ul> * <li>govern the resources used by this bundle</li> * </ul> * * @author Christian Weiss */ public class Activator implements BundleActivator { /** The location of the images properties file relative to this class. */ private static final String IMAGES_PROPERTIES_FILE = "images.properties"; /** The {@link BundleContext}. */ private static BundleContext bundleContext; /** The mapping of image names to their according locations. */ private static Properties imageMapping; /** The {@link ImageRegistry}. */ private static ImageRegistry imageRegistry; /** * {@inheritDoc} * * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) */ @Override public void start(final BundleContext context) throws Exception { Activator.bundleContext = context; } /** * {@inheritDoc} * * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) */ @Override public void stop(final BundleContext context) throws Exception { // if (imageRegistry != null) { imageRegistry.dispose(); imageRegistry = null; } } /** * Returns the {@link BundleContext} of this bundle. * * @return the {@link BundleContext} */ public static BundleContext getContext() { return bundleContext; } /** * Returns the {@link ImageRegistry} of this bundle. * * @return the {@link ImageRegistry} */ private static ImageRegistry getImageRegistry() { if (Display.getDefault() == null) { return null; } imageRegistry = new ImageRegistry(); return imageRegistry; } /** * Puts an image into the local {@link ImageRegistry} using the given key. This ensures the * images' disposal upon bundle shutdown. * * @param key the key * @param image the image */ public static void putImage(final String key, final Image image) { if (getImageRegistry() == null) { return; } imageRegistry.put(key, image); } /** * Returns the image stored unter the given key in the local {@link ImageRegistry}. * * @param key the key * @return the image */ public static Image getImage(final String key) { if (getImageRegistry() == null) { return null; } Image result = imageRegistry.get(key); // if the image is not registered yet, try to find it in the images.properties file // TODO needs exception handling if (result == null) { // load the image mapping if (imageMapping == null) { imageMapping = new Properties(); try { imageMapping.load(Activator.class .getResourceAsStream(IMAGES_PROPERTIES_FILE)); } catch (IOException e) { throw new RuntimeException(e); } } // check if the given key exists in the image mapping if (imageMapping.getProperty(key) != null) { // try to load the configured file final InputStream imageInputStream = Activator.class .getResourceAsStream(imageMapping.getProperty(key)); // if the file exists try to load the image from it if (imageInputStream != null) { result = new Image(Display.getDefault(), imageInputStream); imageRegistry.put(key, result); } } } return result; } }