/*
* 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.query.ui.tree;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.graphics.Image;
import org.teiid.designer.query.sql.lang.ICriteria;
import org.teiid.designer.query.sql.lang.IExpression;
import org.teiid.designer.query.sql.lang.IFrom;
import org.teiid.designer.query.sql.lang.IJoinPredicate;
import org.teiid.designer.query.sql.lang.ILanguageObject;
import org.teiid.designer.query.sql.lang.IQuery;
import org.teiid.designer.query.sql.lang.ISetQuery;
import org.teiid.designer.query.sql.symbol.IElementSymbol;
import org.teiid.designer.query.sql.symbol.IExpressionSymbol;
import org.teiid.designer.query.sql.symbol.IGroupSymbol;
import org.teiid.query.ui.UiConstants;
import org.teiid.query.ui.UiPlugin;
import org.teiid.query.ui.builder.util.ElementViewerFactory;
/**
* QueryTreeLabelProvider is the ILabelProvider for the QueryTreeViewer. It handles labels
* and icons for LanguageObjects in a Command. It uses a delegate ILabelProvider for rendering
* MetadataId objects. This delegate may be supplied through the constructor, or if one is not
* supplied it will be obtained from the static class ElementViewerFactory.
* @since 8.0
*/
public class QueryTreeLabelProvider implements ILabelProvider, UiConstants {
private static final Image SELECT_ICON;
private static final Image FROM_ICON;
private static final Image WHERE_ICON;
private static final Image EXPRESSION_ICON;
private static final Image UNION_ICON;
private static final Image JOIN_ICON;
private static final String WHERE = "WHERE"; //$NON-NLS-1$
private static final String FROM = "FROM"; //$NON-NLS-1$
private static final String UNION = "UNION"; //$NON-NLS-1$
static {
UiPlugin plugin = UiPlugin.getDefault();
SELECT_ICON = plugin.getImage(Images.SELECT_ICON);
FROM_ICON = plugin.getImage(Images.FROM_ICON);
WHERE_ICON = plugin.getImage(Images.WHERE_ICON);
EXPRESSION_ICON = plugin.getImage(Images.EXPRESSION_ICON);
UNION_ICON = plugin.getImage(Images.UNION_ICON);
JOIN_ICON = plugin.getImage(Images.JOIN_ICON);
}
private ILabelProvider delegate;
/**
* @since 4.2
*/
public QueryTreeLabelProvider() {
this(ElementViewerFactory.getLabelProvider());
}
/**
* @since 4.2
*/
public QueryTreeLabelProvider(ILabelProvider metadataLabelProvider) {
super();
if ( metadataLabelProvider != null ) {
this.delegate = metadataLabelProvider;
} else {
this.delegate = ElementViewerFactory.getLabelProvider();
}
}
/**
* @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
* @since 4.2
*/
@Override
public Image getImage(Object element) {
if ( element instanceof ILanguageObject ) {
if ( element instanceof ISetQuery ) {
switch ( ((ISetQuery) element).getOperation() ) {
case INTERSECT:
return null; //INTERSECT_ICON;
case EXCEPT:
return null; //EXCEPT_ICON;
case UNION:
default:
return UNION_ICON;
}
} else if ( element instanceof IQuery ) {
return SELECT_ICON;
} else if ( element instanceof ICriteria ) {
return WHERE_ICON;
} else if ( element instanceof IFrom ) {
return FROM_ICON;
} else if ( element instanceof IJoinPredicate ) {
return JOIN_ICON;
} else if ( element instanceof IExpression ) {
if ( element instanceof IExpressionSymbol) {
return EXPRESSION_ICON;
}
return ( delegate == null ? null : delegate.getImage(((IElementSymbol) element).getMetadataID()) );
} else if ( element instanceof IGroupSymbol ) {
Object id = ((IGroupSymbol) element).getMetadataID();
if ( id != null ) {
return ( delegate == null ? null : delegate.getImage(id) );
}
}
return null;
}
return ( delegate == null ? null : delegate.getImage(element) );
}
/**
* @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
* @since 4.2
*/
@Override
public String getText(Object element) {
if ( element instanceof ILanguageObject ) {
if ( element instanceof ISetQuery ) {
return UNION;
} else if ( element instanceof IQuery ) {
return ((IQuery) element).getSelect().toString();
} else if ( element instanceof IFrom ) {
return FROM;
} else if ( element instanceof ICriteria ) {
return WHERE + ' ' + element.toString();
}
return element.toString();
}
return ( delegate == null ? null : delegate.getText(element) );
}
/**
* @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
* @since 4.2
*/
@Override
public void dispose() {
}
/**
* @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
* @since 4.2
*/
@Override
public void addListener(ILabelProviderListener listener) {
}
/**
* @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
* @since 4.2
*/
@Override
public boolean isLabelProperty(Object element,
String property) {
return false;
}
/**
* @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
* @since 4.2
*/
@Override
public void removeListener(ILabelProviderListener listener) {
}
}