/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.hadoop.eclipse; import java.net.URL; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.Path; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.Bundle; /** * Icons manager */ public class ImageLibrary { private final Bundle bundle = Activator.getDefault().getBundle(); /** * Singleton instance */ private static volatile ImageLibrary instance = null; private ISharedImages sharedImages = PlatformUI.getWorkbench().getSharedImages(); /** * Where resources (icons, images...) are available in the Bundle */ private static final String RESOURCE_DIR = "resources/"; /** * Public access to image descriptors * * @param name * @return the image descriptor */ public static ImageDescriptor get(String name) { return getInstance().getImageDescriptorByName(name); } /** * Public access to images * * @param name * @return the image */ public static Image getImage(String name) { return getInstance().getImageByName(name); } /** * Singleton access * * @return the Image library */ public static ImageLibrary getInstance() { if (instance == null) { synchronized (ImageLibrary.class) { if (instance == null) instance = new ImageLibrary(); } } return instance; } /** * Map of registered resources (ImageDescriptor and Image) */ private Map<String, ImageDescriptor> descMap = new HashMap<String, ImageDescriptor>(); private Map<String, Image> imageMap = new HashMap<String, Image>(); /** * Image library constructor: put image definitions here. */ private ImageLibrary() { /* * Servers view */ newImage("server.view.location.entry", "Elephant-24x24.png"); newImage("server.view.job.entry", "job.gif"); newImage("server.view.action.location.new", "location-new-16x16.png"); newImage("server.view.action.location.edit", "location-edit-16x16.png"); newSharedImage("server.view.action.delete", ISharedImages.IMG_TOOL_DELETE); /* * DFS Browser */ newImage("dfs.browser.root.entry", "files.gif"); newImage("dfs.browser.location.entry", "Elephant-16x16.png"); newSharedImage("dfs.browser.folder.entry", ISharedImages.IMG_OBJ_FOLDER); newSharedImage("dfs.browser.file.entry", ISharedImages.IMG_OBJ_FILE); // DFS files in editor newSharedImage("dfs.file.editor", ISharedImages.IMG_OBJ_FILE); // Actions newImage("dfs.browser.action.mkdir", "new-folder.png"); newImage("dfs.browser.action.download", "download.png"); newImage("dfs.browser.action.upload_files", "upload.png"); newImage("dfs.browser.action.upload_dir", "upload.png"); newSharedImage("dfs.browser.action.delete", ISharedImages.IMG_TOOL_DELETE); newImage("dfs.browser.action.refresh", "refresh.png"); /* * Wizards */ newImage("wizard.mapper.new", "mapwiz.png"); newImage("wizard.reducer.new", "reducewiz.png"); newImage("wizard.driver.new", "driverwiz.png"); newImage("wizard.mapreduce.project.new", "projwiz.png"); } /** * Accessor to images * * @param name * @return */ private ImageDescriptor getImageDescriptorByName(String name) { return this.descMap.get(name); } /** * Accessor to images * * @param name * @return */ private Image getImageByName(String name) { return this.imageMap.get(name); } /** * Access to platform shared images * * @param name * @return */ private ImageDescriptor getSharedByName(String name) { return sharedImages.getImageDescriptor(name); } /** * Load and register a new image. If the image resource does not exist or * fails to load, a default "error" resource is supplied. * * @param name name of the image * @param filename name of the file containing the image * @return whether the image has correctly been loaded */ private boolean newImage(String name, String filename) { ImageDescriptor id; boolean success; try { URL fileURL = FileLocator.find(bundle, new Path(RESOURCE_DIR + filename), null); id = ImageDescriptor.createFromURL(FileLocator.toFileURL(fileURL)); success = true; } catch (Exception e) { e.printStackTrace(); id = ImageDescriptor.getMissingImageDescriptor(); // id = getSharedByName(ISharedImages.IMG_OBJS_ERROR_TSK); success = false; } descMap.put(name, id); imageMap.put(name, id.createImage(true)); return success; } /** * Register an image from the workspace shared image pool. If the image * resource does not exist or fails to load, a default "error" resource is * supplied. * * @param name name of the image * @param sharedName name of the shared image ({@link ISharedImages}) * @return whether the image has correctly been loaded */ private boolean newSharedImage(String name, String sharedName) { boolean success = true; ImageDescriptor id = getSharedByName(sharedName); if (id == null) { id = ImageDescriptor.getMissingImageDescriptor(); // id = getSharedByName(ISharedImages.IMG_OBJS_ERROR_TSK); success = false; } descMap.put(name, id); imageMap.put(name, id.createImage(true)); return success; } /** * Register an image from the workspace shared image pool. If the image * resource does not exist or fails to load, a default "error" resource is * supplied. * * @param name name of the image * @param sharedName name of the shared image ({@link ISharedImages}) * @return whether the image has correctly been loaded */ private boolean newPluginImage(String name, String pluginId, String filename) { boolean success = true; ImageDescriptor id = AbstractUIPlugin.imageDescriptorFromPlugin(pluginId, filename); if (id == null) { id = ImageDescriptor.getMissingImageDescriptor(); // id = getSharedByName(ISharedImages.IMG_OBJS_ERROR_TSK); success = false; } descMap.put(name, id); imageMap.put(name, id.createImage(true)); return success; } }