/*
* 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.navigator.model;
import static org.teiid.designer.ui.navigator.model.ModelNavigatorMessages.viewToolTip;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.search.ui.text.Match;
import org.eclipse.ui.navigator.CommonNavigator;
import org.eclipse.ui.navigator.CommonViewer;
import org.eclipse.ui.part.ShowInContext;
import org.eclipse.ui.views.properties.IPropertySheetPage;
import org.teiid.designer.ui.properties.ModelObjectPropertySourceProvider;
import org.teiid.designer.ui.search.IModelObjectMatch;
import org.teiid.designer.ui.search.MetadataMatchInfo;
import org.teiid.designer.ui.viewsupport.ModelUtilities;
/**
*
*/
public final class ModelNavigator extends CommonNavigator {
/**
*
*/
public ModelNavigator() {
setTitleToolTip(viewToolTip);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.navigator.CommonNavigator#dispose()
*/
@Override
public void dispose() {
CommonViewer viewer = getCommonViewer();
if (viewer.getContentProvider() != null) {
viewer.getContentProvider().dispose();
}
if (viewer.getLabelProvider() != null) {
viewer.getLabelProvider().dispose();
}
super.dispose();
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.navigator.CommonNavigator#getAdapter(java.lang.Class)
*/
@Override
public Object getAdapter( Class key ) {
if (key.equals(IPropertySheetPage.class)) {
ModelObjectPropertySourceProvider propertySourceProvider = ModelUtilities.getPropertySourceProvider();
return propertySourceProvider.getPropertySheetPage();
}
return super.getAdapter(key);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.navigator.CommonNavigator#show(org.eclipse.ui.part.ShowInContext)
*/
@Override
public boolean show( ShowInContext context ) {
Set<EObject> toSelect = new HashSet<EObject>();
ISelection sel = context.getSelection();
if (sel instanceof IStructuredSelection) {
for (Object obj : ((IStructuredSelection)sel).toArray()) {
// a search results has been selected
if (obj instanceof IModelObjectMatch) {
EObject eObj = ((IModelObjectMatch)obj).getEObject();
if (eObj != null) {
toSelect.add(eObj);
}
} else if (obj instanceof MetadataMatchInfo) {
// a resource in the search result has been selected
Match[] matches = ((MetadataMatchInfo)obj).getMatches();
for (Match match : matches) {
if (match instanceof IModelObjectMatch) {
EObject eObj = ((IModelObjectMatch)match).getEObject();
if (eObj != null) {
toSelect.add(eObj);
}
}
}
}
}
}
// select in tree
if (!toSelect.isEmpty()) {
CommonViewer viewer = getCommonViewer();
viewer.getControl().setRedraw(false);
viewer.setSelection(new StructuredSelection(toSelect.toArray()), true);
viewer.getControl().setRedraw(true);
return true;
}
// if no EObjects let the superclass decide if they can be selected
return super.show(context);
}
}