| /******************************************************************************* |
| * Copyright (c) 2012, 2013 Oracle. All rights reserved. |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License 2.0, which accompanies this distribution |
| * and is available at https://www.eclipse.org/legal/epl-2.0/. |
| * |
| * Contributors: |
| * Oracle - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.jpt.common.ui.internal.jface; |
| |
| import java.io.Serializable; |
| import org.eclipse.jpt.common.utility.internal.ObjectTools; |
| import org.eclipse.swt.graphics.Image; |
| |
| /** |
| * A table label provider that returns the value returned by the |
| * {@link #textTransformer text transformer} for an element's text and |
| * the value returned by the {@link #imageTransformer image transformer} for |
| * the element's image. |
| * |
| * @param <E> the type of the objects passed to the label provider |
| */ |
| public class PluggableTableLabelProvider<E> |
| extends PluggableTextTableLabelProvider<E> |
| { |
| private volatile Transformer<E, Image> imageTransformer; |
| |
| |
| /** |
| * Construct a label provider that returns an element's |
| * {@link Object#toString() toString()} value for its text and |
| * <code>null</code> for its image. |
| * @see #setImageTransformer(ImageTransformer) |
| */ |
| public PluggableTableLabelProvider() { |
| this(DefaultImageTransformer.<E>instance(), DefaultTextTransformer.<E>instance()); |
| } |
| |
| /** |
| * Construct a label provider that returns the value returned by the |
| * specified transformer for an element's text and |
| * <code>null</code> for its image. |
| * @see #setImageTransformer(ImageTransformer) |
| */ |
| public PluggableTableLabelProvider(TextTransformer<E> textTransformer) { |
| this(DefaultImageTransformer.<E>instance(), textTransformer); |
| } |
| |
| /** |
| * Construct a label provider that returns the value returned by the |
| * specified text transformer for an element's text and |
| * the value returned by the specified image transformer for |
| * the element's image. |
| */ |
| public PluggableTableLabelProvider(ImageTransformer<E> imageTransformer, TextTransformer<E> textTransformer) { |
| super(textTransformer); |
| if (imageTransformer == null) { |
| throw new NullPointerException(); |
| } |
| this.imageTransformer = imageTransformer; |
| } |
| |
| /** |
| * @exception ClassCastException if the element is not the same type as the |
| * {@link ImageTransformer image transformer}'s generic type argument {@code <E>}. |
| */ |
| @Override |
| @SuppressWarnings("unchecked") |
| public Image getColumnImage(Object element, int columnIndex) { |
| return this.imageTransformer.transform((E) element, columnIndex); |
| } |
| |
| public void setImageTransformer(ImageTransformer<E> imageTransformer) { |
| if (imageTransformer == null) { |
| throw new NullPointerException(); |
| } |
| this.imageTransformer = imageTransformer; |
| } |
| |
| |
| // ********** transformers ********** |
| |
| public interface ImageTransformer<E> |
| extends Transformer<E, Image> |
| { |
| Image transform(E element, int columnIndex); |
| } |
| |
| public static class DefaultImageTransformer<E> |
| implements ImageTransformer<E>, Serializable |
| { |
| @SuppressWarnings("rawtypes") |
| public static final ImageTransformer<?> INSTANCE = new DefaultImageTransformer(); |
| |
| @SuppressWarnings("unchecked") |
| public static <R> ImageTransformer<R> instance() { |
| return (ImageTransformer<R>) INSTANCE; |
| } |
| |
| // ensure single instance |
| private DefaultImageTransformer() { |
| super(); |
| } |
| |
| public Image transform(E element, int columnIndex) { |
| return null; |
| } |
| |
| @Override |
| public String toString() { |
| return ObjectTools.toString(this); |
| } |
| |
| private static final long serialVersionUID = 1L; |
| private Object readResolve() { |
| // replace this object with the singleton |
| return INSTANCE; |
| } |
| } |
| } |