package org.teiid.designer.datatools.ui.dialogs;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.datatools.connectivity.ICategory;
import org.eclipse.datatools.connectivity.IConnectionProfile;
import org.eclipse.datatools.connectivity.ProfileManager;
import org.eclipse.datatools.connectivity.ui.actions.AddProfileViewAction;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.teiid.designer.datatools.ui.DatatoolsUiConstants;
import org.teiid.designer.ui.common.util.WidgetFactory;
import org.teiid.designer.ui.common.widget.MessageLabel;
/**
* @since 8.0
*/
public class SelectConnectionProfileDialog extends ElementTreeSelectionDialog implements ISelectionChangedListener {
private static final String DEFAULT_TITLE = DatatoolsUiConstants.UTIL.getString("SelectConnectionProfileDialog.title"); //$NON-NLS-1$
private static final String NEW_BUTTON_TEXT = DatatoolsUiConstants.UTIL.getString("SelectConnectionProfileDialog.newButton"); //$NON-NLS-1$
private Text fileNameText;
private MessageLabel statusMessageLabel;
private Button newCPButton;
private IConnectionProfile selectedCP;
private static final String UNKNOWN_FILE = DatatoolsUiConstants.UTIL.getString("SelectConnectionProfileDialog.unknownFileName"); //$NON-NLS-1$
/**
* Construct an instance of ModelWorkspaceDialog. This constructor defaults to the resource root.
*
* @param parent
*/
public SelectConnectionProfileDialog( Shell parent ) {
this(parent, DEFAULT_TITLE, new ConnectionProfileTreeProvider(), new ConnectionProfileTreeProvider());
}
public SelectConnectionProfileDialog( Shell parent,
ILabelProvider labelProvider,
ITreeContentProvider contentProvider ) {
this(parent, null, labelProvider, contentProvider);
}
public SelectConnectionProfileDialog( Shell parent,
String title,
ILabelProvider labelProvider,
ITreeContentProvider contentProvider ) {
super(parent, labelProvider, contentProvider);
setTitle(title);
setMessage(DatatoolsUiConstants.UTIL.getString("SelectConnectionProfileDialog.defaultMessage")); //$NON-NLS-1$
setInput(ProfileManager.getInstance());//.getRootCategories());
setAllowMultiple(false);
}
@Override
protected Control createDialogArea(Composite parent) {
Composite panel = new Composite(parent, SWT.NONE);
panel.setLayout(new GridLayout());
GridData panelData = new GridData(GridData.FILL_BOTH);
panel.setLayoutData(panelData);
// createMessageArea(panel);
// setMessage(DatatoolsUiConstants.UTIL.getString("SelectConnectionProfileDialog.defaultMessage")); //$NON-NLS-1$
Group selectedGroup = WidgetFactory.createGroup(panel, DatatoolsUiConstants.UTIL.getString("SelectConnectionProfileDialog.selectedGroupTitle"), GridData.FILL_HORIZONTAL); //$NON-NLS-1$
//selectedGroup.setText(null);
selectedGroup.setLayout(new GridLayout(2, false));
this.fileNameText = WidgetFactory.createTextField(selectedGroup, GridData.FILL_HORIZONTAL, UNKNOWN_FILE);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.heightHint = convertHeightInCharsToPixels(1);
this.fileNameText.setLayoutData(data);
this.fileNameText.setEditable(false);
this.fileNameText.setBackground(panel.getBackground());
this.fileNameText.setText(UNKNOWN_FILE);
newCPButton = WidgetFactory.createButton(selectedGroup, NEW_BUTTON_TEXT);
newCPButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent event ) {
AddProfileViewAction action = new AddProfileViewAction();
action.run();
selectedCP = action.getAddedProfile();
if( selectedCP != null ) {
// Reset the input to this dialog since a new CP has been added
setInput(ProfileManager.getInstance());
// Refresh the tree
getTreeViewer().refresh();
// Set selection on the tree to drive the text field and validation
getTreeViewer().setSelection(new StructuredSelection(selectedCP));
}
}
});
super.createDialogArea(panel);
this.statusMessageLabel = new MessageLabel(panel);
GridData statusData = new GridData(GridData.FILL_HORIZONTAL);
data.heightHint = convertHeightInCharsToPixels(1);
this.statusMessageLabel.setLayoutData(statusData);
this.statusMessageLabel.setEnabled(false);
this.statusMessageLabel.setText(UNKNOWN_FILE);
// listen to selection in the tree
getTreeViewer().addSelectionChangedListener(this);
return panel;
}
@Override
public void selectionChanged(SelectionChangedEvent event) {
TreeSelection selection = (TreeSelection)event.getSelection();
if( selection.isEmpty() ) {
this.selectedCP = null;
this.fileNameText.setText(UNKNOWN_FILE);
updateOnSelection(null);
return;
}
Object firstElement = selection.getFirstElement();
if(firstElement instanceof ICategory ) {
this.selectedCP = null;
this.fileNameText.setText(UNKNOWN_FILE);
} else {
this.selectedCP = (IConnectionProfile)selection.getFirstElement();
this.fileNameText.setText(selectedCP.getName());
}
updateOnSelection(firstElement);
}
private void updateOnSelection(Object selectedObject) {
IStatus status = new Status(IStatus.INFO, DatatoolsUiConstants.PLUGIN_ID, DatatoolsUiConstants.UTIL.getString("SelectConnectionProfileDialog.okSelectionMessage")); //$NON-NLS-1$
if( selectedObject != null ) {
if( selectedObject instanceof ICategory ) {
status = new Status(IStatus.ERROR, DatatoolsUiConstants.PLUGIN_ID, DatatoolsUiConstants.UTIL.getString("SelectConnectionProfileDialog.categorySelectionMessage")); //$NON-NLS-1$
getOkButton().setEnabled(false);
} else {
getOkButton().setEnabled(true);
}
} else {
status = new Status(IStatus.ERROR, DatatoolsUiConstants.PLUGIN_ID, DatatoolsUiConstants.UTIL.getString("SelectConnectionProfileDialog.invalidSelectionMessage")); //$NON-NLS-1$
getOkButton().setEnabled(false);
}
this.statusMessageLabel.setErrorStatus(status);
}
public IConnectionProfile getSelectedCP() {
return this.selectedCP;
}
}