/******************************************************************************* * 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.icons.impl; import java.util.*; import org.eclipse.swt.graphics.Image; import org.w3c.dom.*; import org.jboss.tools.common.model.icons.XIconList; import org.jboss.tools.common.meta.impl.*; import org.jboss.tools.common.model.util.IconUtil; public class XIconListImpl extends XMetaElementImpl implements XIconList, XMetaDataConstants { private Hashtable<String,String> iconnames = new Hashtable<String,String>(); private Hashtable<String,Image> eclipseImages = new Hashtable<String,Image>(); public XIconListImpl() {} public String getIconPath(String name, String defaultName) { String s = (String)iconnames.get(name); return (s == null) ? (String)iconnames.get(defaultName) : s; } public Image getImage(String name, String defaultname) { Image i = getImage(name); if(i == null) { i = getImage(defaultname); if(i != null) eclipseImages.put(name, i); } return i; } public Image getImage(String name) { Image image = (Image)eclipseImages.get(name); if(image == null || image.isDisposed()) { String picture = (String)iconnames.get(name); if(picture == null) return null; image = IconUtil.getEclipseImage(picture); eclipseImages.put(name, image); } return image; } public void load(Element element) { load("", element); //$NON-NLS-1$ } protected void load(String prefix, Element element) { if(element == null) return; NodeList nl = element.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { Node n = nl.item(i); if(n.getNodeType() != Node.ELEMENT_NODE) continue; Element c = (Element)n; String dp = c.getNodeName(); if(dp.equals(ICON)) { String nm = prefix + c.getAttribute(NAME); String pt = c.getAttribute(ICON_PATH); iconnames.put(nm, pt); } else if(dp.equals("GROUP")) { //$NON-NLS-1$ String nm = c.getAttribute(NAME); load(prefix + nm + ".", c); //$NON-NLS-1$ } else { load(prefix + dp + ".", c); //$NON-NLS-1$ } } } }