/*
* 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 org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.dialogs.ISelectionStatusValidator;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.ui.UiConstants;
import org.teiid.designer.ui.explorer.ModelExplorerContentProvider;
import org.teiid.designer.ui.explorer.ModelExplorerLabelProvider;
/**
* ModelWorkspaceDialog is a dialog that displays the workspace tree and allows selection
*
* @since 8.0
*/
public class ModelWorkspaceDialog extends ElementTreeSelectionDialog implements ISelectionChangedListener {
private static final String DEFAULT_TITLE = UiConstants.Util.getString("ModelWorkspaceDialog.title"); //$NON-NLS-1$
private static final String PROPERTIES_BUTTON_TEXT = UiConstants.Util.getString("ModelWorkspaceDialog.propertiesButton.text"); //$NON-NLS-1$
private IWorkspaceRoot root;
private Button btnProperties;
private int PROPERTIES_BUTTON_ID = 10234;
EObject selectedEObject;
private boolean bShowPropertiesButton = true;
/**
* Construct an instance of ModelWorkspaceDialog. This constructor defaults to the resource root.
*
* @param parent
*/
public ModelWorkspaceDialog( Shell parent ) {
this(parent, DEFAULT_TITLE, new ModelExplorerLabelProvider(), new ModelExplorerContentProvider());
}
/**
* Construct an instance of ModelWorkspaceDialog. This constructor defaults to the resource root.
*
* @param parent
* @param labelProvider an ILabelProvider for the tree
* @param contentProvider an ITreeContentProvider for the tree
*/
public ModelWorkspaceDialog( Shell parent,
ILabelProvider labelProvider,
ITreeContentProvider contentProvider ) {
this(parent, null, labelProvider, contentProvider);
}
/**
* Construct an instance of ModelWorkspaceDialog. This constructor defaults to the resource root.
*
* @param parent
* @param labelProvider an ILabelProvider for the tree
* @param contentProvider an ITreeContentProvider for the tree
*/
public ModelWorkspaceDialog( Shell parent,
String title,
ILabelProvider labelProvider,
ITreeContentProvider contentProvider ) {
super(parent, labelProvider, contentProvider);
init(title);
}
protected void init( String title ) {
// use resource filter used by model explorer
addFilter(new ModelingResourceFilter());
if (title == null) {
setTitle(DEFAULT_TITLE);
} else {
setTitle(title);
}
// default to EObject validator
super.setValidator(new EObjectSelectionValidator());
// set input
if (root != null) {
setInput(root);
} else {
// use default root
setInput(ModelerCore.getWorkspace().getRoot());
}
}
/**
* Adds a ViewerFilter to this dialog's TreeViewer
*
* @param filter
*/
public void addViewerFilter( ViewerFilter filter ) {
super.getTreeViewer().addFilter(filter);
}
/**
* Sets the Validator for this dialog's TreeViewer
*
* @param filter
*/
@Override
public void setValidator( ISelectionStatusValidator validator ) {
super.setValidator(validator);
}
public void setShowPropertiesButton( boolean b ) {
bShowPropertiesButton = b;
btnProperties.setVisible(bShowPropertiesButton);
}
/**
* @see org.eclipse.ui.dialogs.ElementTreeSelectionDialog#createTreeViewer(org.eclipse.swt.widgets.Composite)
*/
@Override
protected TreeViewer createTreeViewer( Composite parent ) {
TreeViewer result = super.createTreeViewer(parent);
// add a filter to remove closed projects
result.addFilter(new ViewerFilter() {
@Override
public boolean select( Viewer viewer,
Object parentElement,
Object element ) {
if (element instanceof IProject) {
return ((IProject)element).isOpen();
}
return true;
}
});
result.expandToLevel(2);
return result;
}
/**
* Method declared on Dialog.
*/
@Override
protected void createButtonsForButtonBar( Composite parent ) {
// add our Properties button first
btnProperties = createButton(parent, PROPERTIES_BUTTON_ID, PROPERTIES_BUTTON_TEXT, false);
// then the OK and Cancel buttons
super.createButtonsForButtonBar(parent);
btnProperties.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
PropertiesDialog dlg = new PropertiesDialog(selectedEObject, null);
dlg.open();
}
});
// listen to selection in the tree
getTreeViewer().addSelectionChangedListener(this);
}
@Override
public void selectionChanged( SelectionChangedEvent event ) {
IStructuredSelection sel = (IStructuredSelection)getTreeViewer().getSelection();
if (sel.getFirstElement() instanceof EObject) {
selectedEObject = (EObject)sel.getFirstElement();
btnProperties.setEnabled(true);
} else {
selectedEObject = null;
btnProperties.setEnabled(false);
}
}
}