/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.ui.viewsupport;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
/** LabelProvider that caches the getText value from the supplied
* provider. Since entries are never removed, this class is recommended
* for short-term usage, such as in dialogs that are sorted and filtered.
*
* @author PForhan
*
* @since 8.0
*/
public class TextCachingLabelProvider extends LabelProvider {
//
// Instance variables:
//
private int cacheHits;
private int cacheMisses;
private final ILabelProvider realProvider;
private final Map cache = new HashMap();
//
// Constructors:
//
public TextCachingLabelProvider(ILabelProvider provider) {
this.realProvider = provider;
}
//
// Overrides:
//
@Override
public String getText(Object element) {
String value = (String) cache.get(element);
if (value == null) {
cacheMisses++;
value = realProvider.getText(element);
cache.put(element, value);
} else {
cacheHits++;
} // endif
return value;
}
@Override
public Image getImage(Object element) {
return realProvider.getImage(element);
}
//
// Methods:
//
public void printStats() {
System.out.println("Cache size: "+cache.size()+"; hits: "+cacheHits+"; misses: "+cacheMisses); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
}
}