/*******************************************************************************
* Copyright (c) 2007, 2014 compeople AG and others.
* 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:
* compeople AG - initial API and implementation
*******************************************************************************/
package org.eclipse.riena.ui.core.resource;
import java.util.HashMap;
import java.util.Map;
/**
* Maintains the icons used by the application.
*
* @since 2.0
*/
public class IconManager implements IIconManager {
private static final char EXTENSION_SEPARATOR = '.';
private final Map<String, Icon> icons;
/**
* Constructor.
*/
public IconManager() {
icons = new HashMap<String, Icon>();
}
/**
* {@inheritDoc}
*/
public String getIconID(final String name, final IconSize size) {
return getIconID(name, size, IconState.NORMAL);
}
/**
* {@inheritDoc}
*/
public String getIconID(final String name, final IconSize size, final IconState state) {
if (name == null) {
return null;
}
final Icon icon = createIcon(name, size, state);
final String iconID = icon.getID();
icons.put(iconID, icon);
return iconID;
}
protected Icon createIcon(final String name, final IconSize size, final IconState state) {
return new Icon(name, size, state);
}
/**
* {@inheritDoc}
*/
public String getName(final String iconID) {
final Icon icon = icons.get(iconID);
if (icon != null) {
return icon.getName();
}
return null;
}
/**
* {@inheritDoc}
*/
public IconSize getSize(final String iconID) {
final Icon icon = icons.get(iconID);
if (icon != null) {
return icon.getSize();
}
return null;
}
/**
* {@inheritDoc}
*/
public IconState getState(final String iconID) {
final Icon icon = icons.get(iconID);
if (icon != null) {
return icon.getState();
}
return null;
}
/**
* {@inheritDoc}
*/
public boolean hasExtension(final String iconID) {
return iconID.indexOf(EXTENSION_SEPARATOR) > 0;
}
/**
* This class stores all the information of an icon that are necessary to
* create the file name.
*/
public class Icon {
private final String name;
private final IconSize size;
private final IconState state;
/**
* Creates an icon.
*
* @param name
* The name of the icon.
* @param size
* The icon size.
* @param state
* The icon state.
*/
public Icon(final String name, final IconSize size, final IconState state) {
this.name = name;
this.size = size;
this.state = state;
}
/**
* Returns the ID of the icon.
*
* @return ID
*/
public String getID() {
String id = name;
if (state != null) {
id += state.getDefaultMapping();
}
if (size != null) {
id += size.getDefaultMapping();
}
return id;
}
/**
* Return the name of the icon
*
* @return icon name
*/
public String getName() {
return name;
}
/**
* Returns the size of the icon.
*
* @return icon size
*/
public IconSize getSize() {
return size;
}
/**
* Returns the state of the icon.
*
* @return icon state
*/
public IconState getState() {
return state;
}
}
}