/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package de.cismet.cids.custom.switchon.gui.utils;
import org.apache.commons.lang.StringUtils;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
/**
* A Utility class, which loads images according to the first letter of a string or the content type.
*
* @author Gilles Baatz
* @version $Revision$, $Date$
*/
public class ImageGetterUtils {
//~ Static fields/initializers ---------------------------------------------
private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(
ImageGetterUtils.class);
public static BufferedImage UNKOWN;
public static BufferedImage DOKUMENT;
public static final String DOCUMENT_LETTER_PATH = "/de/cismet/cids/custom/switchon/letterIcons/document-attribute-";
public static final String CIRCLE_LETTER_PATH = "/de/cismet/cids/custom/switchon/letterIcons/icon-circle";
static {
try {
UNKOWN = ImageIO.read(ImageGetterUtils.class.getResource(
"/de/cismet/cids/custom/switchon/contentTypeIcons/unknown.png"));
} catch (IOException ex) {
LOG.error("Could not fetch ERROR_IMAGE", ex);
UNKOWN = null;
}
try {
DOKUMENT = ImageIO.read(ImageGetterUtils.class.getResource(
"/de/cismet/cids/custom/switchon/letterIcons/document.png"));
} catch (IOException ex) {
LOG.error("Could not fetch DOKUMENT", ex);
DOKUMENT = null;
}
}
//~ Enums ------------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @version $Revision$, $Date$
*/
public enum ImageSize {
//~ Enum constants -----------------------------------------------------
PIXEL_16("_16.png"), PIXEL_32("_32.png");
//~ Instance fields ----------------------------------------------------
private String value;
//~ Constructors -------------------------------------------------------
/**
* Creates a new ImageSize object.
*
* @param value DOCUMENT ME!
*/
private ImageSize(final String value) {
this.value = value;
}
}
//~ Methods ----------------------------------------------------------------
/**
* If the parameter extension is not null and no image for the ContentType was found, then a image for that
* extension is searched.
*
* @param contentTypeName DOCUMENT ME!
* @param imageSize DOCUMENT ME!
* @param extension DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public static Image getImageForContentType(final String contentTypeName,
final ImageSize imageSize,
final String extension) {
if (contentTypeName == null) {
return getFallBackImage(imageSize);
}
URL resource = null;
if (contentTypeName.contains("/")) {
resource = ImageGetterUtils.class.getResource(
"/de/cismet/tools/gui/downloadmanager/documenttypes/"
+ contentTypeName.split("/")[1]
+ imageSize.value);
}
Image image = getFallBackImage(imageSize);
if (resource != null) {
try {
image = ImageIO.read(resource);
} catch (IOException ex) {
LOG.error("Error while reading an icon", ex);
}
} else if (extension != null) {
image = getImageForExtension(extension, imageSize);
}
return image;
}
/**
* DOCUMENT ME!
*
* @param extension DOCUMENT ME!
* @param imageSize DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public static Image getImageForExtension(final String extension, final ImageSize imageSize) {
if (extension == null) {
return getFallBackImage(imageSize);
}
final URL resource = ImageGetterUtils.class.getResource(
"/de/cismet/tools/gui/downloadmanager/documenttypes/"
+ extension.toLowerCase()
+ imageSize.value);
Image image = getFallBackImage(imageSize);
if (resource != null) {
try {
image = ImageIO.read(resource);
} catch (IOException ex) {
LOG.error("Error while reading an icon", ex);
}
}
return image;
}
/**
* DOCUMENT ME!
*
* @param imageSize DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private static Image getFallBackImage(final ImageSize imageSize) {
final URL resource = ImageGetterUtils.class.getResource(
"/de/cismet/tools/gui/downloadmanager/documenttypes/fallback_single"
+ imageSize.value);
Image image = UNKOWN;
if (resource != null) {
try {
image = ImageIO.read(resource);
} catch (IOException ex) {
LOG.error("Error while reading an icon", ex);
}
}
return image;
}
/**
* DOCUMENT ME!
*
* @param protocolName DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public static Image getImageForProtocol(final String protocolName) {
if (protocolName == null) {
return UNKOWN;
}
final URL resource = ImageGetterUtils.class.getResource(
"/de/cismet/cids/custom/switchon/contentTypeIcons/"
+ protocolName.replace('/', '-')
+ ".png");
Image image = UNKOWN;
if (resource != null) {
try {
image = ImageIO.read(resource);
} catch (IOException ex) {
LOG.error("Error while reading an icon", ex);
}
}
return image;
}
/**
* Get image according to the first letter of a string.
*
* @param str DOCUMENT ME!
* @param path DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public static Image getImageForString(final String str, final String path) {
char letter = '\0';
if (StringUtils.isNotBlank(str)) {
letter = str.charAt(0);
}
return getImageForLetter(letter, path);
}
/**
* DOCUMENT ME!
*
* @param letter DOCUMENT ME!
* @param path DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public static Image getImageForLetter(char letter, final String path) {
if (!Character.isAlphabetic(letter)) {
return DOKUMENT;
}
letter = Character.toLowerCase(letter);
final URL resource = ImageGetterUtils.class.getResource(path + letter + ".png");
Image image = UNKOWN;
if (resource != null) {
try {
image = ImageIO.read(resource);
} catch (IOException ex) {
LOG.error("Error while reading an icon", ex);
}
}
return image;
}
}