Java tutorial
/** * Copyright (c) 2013-2014 Angelo ZERR. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation */ package org.eclipse.wst.html.webresources.internal.ui; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; import java.util.Map; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.ImageLoader; /** * Utility class to handle image resources. */ public class ImageResource { private static final String IMAGE_DIR = "wtp-webresources-images"; //$NON-NLS-1$ private static Map<ImageDescriptor, URL> fURLMap; private static File fTempDir; private static int fImageCount; // the image registry private static ImageRegistry imageRegistry; // map of image descriptors since these // will be lost by the image registry private static Map<String, ImageDescriptor> imageDescriptors; // base urls for images private static URL ICON_BASE_URL; private static final String URL_OBJ = "full/obj16/"; // General Object Images public static final String IMG_CSS_CLASSNAME = "css_classname"; public static final String IMG_CSS_ID = "css_id"; public static final String IMG_NEW_CSS = "newcss"; public static final String IMG_NEW_HTML = "newhtml"; static { try { String pathSuffix = "icons/"; ICON_BASE_URL = WebResourcesUIPlugin.getDefault().getBundle().getEntry(pathSuffix); fURLMap = new HashMap<ImageDescriptor, URL>(); fTempDir = getTempDir(); fImageCount = 0; } catch (Exception e) { Trace.trace(Trace.SEVERE, "Images error", e); } } /** * Cannot construct an ImageResource. Use static methods only. */ private ImageResource() { } /** * Dispose of element images that were created. */ public static void dispose() { if (fTempDir != null) { delete(fTempDir); } fURLMap = null; } /** * Return the image with the given key. * * @param key * java.lang.String * @return org.eclipse.swt.graphics.Image */ public static Image getImage(String key) { return getImage(key, null); } /** * Return the image with the given key. * * @param key * java.lang.String * @return org.eclipse.swt.graphics.Image */ public static Image getImage(String key, String keyIfImageNull) { if (imageRegistry == null) initializeImageRegistry(); Image image = imageRegistry.get(key); if (image == null) { if (keyIfImageNull != null) { return getImage(keyIfImageNull, null); } imageRegistry.put(key, ImageDescriptor.getMissingImageDescriptor()); image = imageRegistry.get(key); } return image; } /** * Return the image descriptor with the given key. * * @param key * java.lang.String * @return org.eclipse.jface.resource.ImageDescriptor */ public static ImageDescriptor getImageDescriptor(String key) { if (imageRegistry == null) initializeImageRegistry(); ImageDescriptor id = imageDescriptors.get(key); if (id != null) return id; return ImageDescriptor.getMissingImageDescriptor(); } /** * Initialize the image resources. */ protected static void initializeImageRegistry() { imageRegistry = WebResourcesUIPlugin.getDefault().getImageRegistry(); imageDescriptors = new HashMap<String, ImageDescriptor>(); // load general object images registerImage(IMG_CSS_CLASSNAME, URL_OBJ + IMG_CSS_CLASSNAME + ".gif"); registerImage(IMG_CSS_ID, URL_OBJ + IMG_CSS_ID + ".gif"); registerImage(IMG_NEW_CSS, URL_OBJ + IMG_NEW_CSS + ".gif"); registerImage(IMG_NEW_HTML, URL_OBJ + IMG_NEW_HTML + ".gif"); } /** * Register an image with the registry. * * @param key * java.lang.String * @param partialURL * java.lang.String */ private static void registerImage(String key, String partialURL) { try { ImageDescriptor id = ImageDescriptor.createFromURL(new URL(ICON_BASE_URL, partialURL)); imageRegistry.put(key, id); imageDescriptors.put(key, id); } catch (Exception e) { Trace.trace(Trace.SEVERE, "Error registering image " + key + " from " + partialURL, e); } } // Temp image private static File getTempDir() { try { File imageDir = WebResourcesUIPlugin.getDefault().getStateLocation().append(IMAGE_DIR).toFile(); if (imageDir.exists()) { // has not been deleted on previous shutdown delete(imageDir); } if (!imageDir.exists()) { imageDir.mkdir(); } if (!imageDir.isDirectory()) { Trace.trace(Trace.SEVERE, "Failed to create image directory " + imageDir.toString()); //$NON-NLS-1$ return null; } return imageDir; } catch (IllegalStateException e) { // no state location return null; } } private static void delete(File file) { if (file.isDirectory()) { File[] listFiles = file.listFiles(); for (int i = 0; i < listFiles.length; i++) { delete(listFiles[i]); } } file.delete(); } public static URL getImageURL(ImageDescriptor descriptor) { if (fTempDir == null) return null; URL url = fURLMap.get(descriptor); if (url != null) return url; File imageFile = getNewFile(); ImageData imageData = descriptor.getImageData(); if (imageData == null) { return null; } ImageLoader loader = new ImageLoader(); loader.data = new ImageData[] { imageData }; loader.save(imageFile.getAbsolutePath(), SWT.IMAGE_PNG); try { url = imageFile.toURI().toURL(); fURLMap.put(descriptor, url); return url; } catch (MalformedURLException e) { Trace.trace(Trace.SEVERE, "Failed to create image directory ", e); //$NON-NLS-1$ } return null; } private static File getNewFile() { File file; do { file = new File(fTempDir, String.valueOf(getImageCount()) + ".png"); //$NON-NLS-1$ } while (file.exists()); return file; } private static synchronized int getImageCount() { return fImageCount++; } }