/******************************************************************************* * Copyright Technophobia Ltd 2012 * * This file is part of the Substeps Eclipse Plugin. * * The Substeps Eclipse Plugin is free software: you can redistribute it and/or modify * it under the terms of the Eclipse Public License v1.0. * * The Substeps Eclipse Plugin is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * Eclipse Public License for more details. * * You should have received a copy of the Eclipse Public License * along with the Substeps Eclipse Plugin. If not, see <http://www.eclipse.org/legal/epl-v10.html>. ******************************************************************************/ package com.technophobia.substeps.junit.ui; import java.util.HashMap; import java.util.Map; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Image; import com.technophobia.eclipse.ui.Disposable; import com.technophobia.substeps.supplier.Transformer; public class SubstepsIconProvider implements Disposable { private final Map<SubstepsIcon, Image> icons; private final Transformer<SubstepsIcon, Image> imageLoader; private final Transformer<SubstepsIcon, ImageDescriptor> imageDescriptorLoader; public SubstepsIconProvider(final Transformer<SubstepsIcon, Image> imageLoader, final Transformer<SubstepsIcon, ImageDescriptor> imageDescriptorLoader) { this.imageLoader = imageLoader; this.imageDescriptorLoader = imageDescriptorLoader; this.icons = new HashMap<SubstepsIcon, Image>(); } public Image imageFor(final SubstepsIcon icon) { if (!icons.containsKey(icon)) { icons.put(icon, createImageFor(icon)); } return icons.get(icon); } public ImageDescriptor imageDescriptorFor(final SubstepsIcon icon) { return this.imageDescriptorLoader.from(icon); } @Override public void dispose() { for (final Image image : icons.values()) { image.dispose(); } } private Image createImageFor(final SubstepsIcon iconToLoad) { return imageLoader.from(iconToLoad); } }