/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.util; import java.net.MalformedURLException; import java.net.URL; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.commands.ICommandImageService; import org.jboss.tools.common.model.Messages; import org.jboss.tools.common.model.XModelObjectConstants; import org.jboss.tools.common.model.plugin.ModelPlugin; import org.osgi.framework.Bundle; public class ModelImages { private static ModelImages instance; static { instance = new ModelImages(ModelPlugin.getDefault().getBundle().getEntry(XModelObjectConstants.SEPARATOR)); } public static Image getImage(String key) { Image result = null; ImageRegistry registry = ModelPlugin.getDefault().getImageRegistry(); synchronized(registry) { result = registry.get(key); } if(result == null || result.isDisposed()) { result = instance.createImageDescriptor(key).createImage(); if(result != null) { synchronized (registry) { registry.remove(key); registry.put(key, result); } } } return result; } private URL baseUrl; protected ModelImages(URL url) { baseUrl = url; } public ImageDescriptor createImageDescriptor(String key) { if(key.startsWith("command:")) { //$NON-NLS-1$ key = key.substring("command:".length()); //$NON-NLS-1$ IWorkbench w = ModelPlugin.getDefault().getWorkbench(); ICommandImageService s = (ICommandImageService)w.getService(ICommandImageService.class); return s.getImageDescriptor(key); } URL url = baseUrl; if(key.startsWith("plugin:")) { //$NON-NLS-1$ key = key.substring("plugin:".length()); //$NON-NLS-1$ int i = key.indexOf(":"); //$NON-NLS-1$ String plugin = key.substring(0, i); key = key.substring(i + 1); Bundle bundle = Platform.getBundle(plugin); if(bundle != null) { url = bundle.getEntry(XModelObjectConstants.SEPARATOR); } } try { return ImageDescriptor.createFromURL(makeIconFileURL(url, key)); } catch (MalformedURLException e) { return ImageDescriptor.getMissingImageDescriptor(); } } private URL makeIconFileURL(URL url, String name) throws MalformedURLException { if (name == null) throw new MalformedURLException(Messages.ModelImages_NullImageName); return new URL(url, name); } }