/*
* 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.ArrayList;
import java.util.Iterator;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.graphics.Image;
import org.teiid.designer.ui.UiConstants;
/**
* @since 8.0
*/
public class ExtendedModelObjectLabelProvider implements ILabelProvider, UiConstants.ExtensionPoints.ExtendedModelLabelProvider {
private ArrayList extendedModelProviders = new ArrayList();
public ExtendedModelObjectLabelProvider() {
loadProviderList();
}
private void loadProviderList() {
// build a map of all DiagramProvider contributions of type ILabelProvider
// get the DiagramProvider extension point from the plugin class
IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(UiConstants.PLUGIN_ID, EXTENDED_MODEL_ID);
// get the all extensions to the DiagramProvider extension point
IExtension[] extensions = extensionPoint.getExtensions();
// walk through the extensions and find all ITreeContentProviders
for ( int i=0 ; i<extensions.length ; ++i ) {
IConfigurationElement[] elements = extensions[i].getConfigurationElements();
try {
// first, find the content provider instance and add it to the instance list
for ( int j=0 ; j<elements.length ; ++j ) {
if ( elements[j].getName().equals(EXTENDED_MODEL_CLASS)) {
Object provider = elements[j].createExecutableExtension(EXTENDED_MODEL_CLASSNAME);
if ( provider instanceof ILabelProvider ) {
extendedModelProviders.add(provider);
break;
}
}
}
} catch (Exception e) {
// catch any Exception that occurred obtaining the configuration and log it
String message = UiConstants.Util.getString("ExtendedModelObjectLabelProvider.configurationErrorMessage", //$NON-NLS-1$
extensions[i].getUniqueIdentifier());
UiConstants.Util.log(IStatus.ERROR, e, message);
}
}
}
// =========================================
// ILabelProvider Methods
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
*/
@Override
public Image getImage(Object element) {
Image result = null;
for ( Iterator iter = extendedModelProviders.iterator() ; iter.hasNext() ; ) {
ILabelProvider provider = (ILabelProvider) iter.next();
result = provider.getImage(element);
if( result != null ) {
return result;
}
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
*/
@Override
public String getText(Object element) {
String result = null;
for ( Iterator iter = extendedModelProviders.iterator() ; iter.hasNext() ; ) {
ILabelProvider provider = (ILabelProvider) iter.next();
result = provider.getText(element);
if( result != null ) {
return result;
}
}
return result;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
*/
@Override
public void addListener(ILabelProviderListener listener) {
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
*/
@Override
public void dispose() {
if ( extendedModelProviders != null ) {
for ( Iterator iter = extendedModelProviders.iterator() ; iter.hasNext() ; ) {
ILabelProvider provider = (ILabelProvider) iter.next();
if ( provider != null ) {
try {
provider.dispose();
} catch (Exception e) {
// catch any Exception that occurred in the diagram provider and log it
String message = UiConstants.Util.getString("DiagramLabelProvider.diagramProviderErrorMessage"); //$NON-NLS-1$
UiConstants.Util.log(IStatus.ERROR, e, message);
}
}
}
}
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
*/
@Override
public boolean isLabelProperty(Object element, String property) {
return false;
}
/* (non-Javadoc)
* @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
*/
@Override
public void removeListener(ILabelProviderListener listener) {
}
}