/*
* 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.search;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.container.Container;
import org.teiid.designer.core.search.runtime.ResourceObjectRecord;
import org.teiid.designer.ui.viewsupport.ModelObjectUtilities;
/**
* @since 8.0
*/
public class FindObjectLabelProvider extends LabelProvider {
public static final int OBJECT = 0;
public static final int CONTAINER = 1;
private int iStyle = 0;
public FindObjectLabelProvider( int iStyle ) {
super();
this.iStyle = iStyle;
}
@Override
public String getText( Object element ) {
String sText = " Unknown "; //$NON-NLS-1$
if ( element instanceof String ) {
sText = (String)element;
}
else
if ( element instanceof ResourceObjectRecord ) {
ResourceObjectRecord ror = (ResourceObjectRecord)element;
if ( iStyle == OBJECT ) {
sText = ror.getName();
}
else
if ( iStyle == CONTAINER ) {
EObject eo = getEObjectForRecord( ror );
if ( eo != null ) {
IPath path = ModelerCore.getModelEditor().getModelRelativePath( eo );
sText = ror.getResourcePath() + path.makeAbsolute().toString();
} else {
sText = ror.getResourcePath();
}
}
}
return sText;
}
@Override
public Image getImage( Object element ) {
Image imgResult = null;
if ( element instanceof ResourceObjectRecord ) {
ResourceObjectRecord ror = (ResourceObjectRecord)element;
try {
final Container container = ModelerCore.getModelContainer();
final URI theUri = URI.createURI( ror.getMetaclassURI() );
EObject eoClass = container.getEObject( theUri, true );
if( eoClass != null && !(eoClass instanceof EClass) )
eoClass = eoClass.eClass();
if( eoClass != null )
imgResult
= ModelObjectUtilities.getImage( (EClass)eoClass );
} catch ( Exception ce ) {
ModelerCore.Util.log( IStatus.ERROR, ce, ce.getMessage() );
}
}
return imgResult;
}
public EObject getEObjectForRecord( ResourceObjectRecord ror ) {
EObject eObj = null;
try {
URI uri = URI.createURI( ror.getObjectURI() );
// Fix for Defect 16700 to avoid NPE in getEObject() call
if( uri.fragment() != null )
eObj = ModelerCore.getModelContainer().getEObject( uri, true );
} catch ( CoreException ce ) {
ModelerCore.Util.log(IStatus.ERROR, ce, ce.getMessage());
}
return eObj;
}
}