/* * 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.roles.ui.wizard.dialogs; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; 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.TreeSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; 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.core.designer.util.CoreStringUtil; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.metamodels.relational.Column; import org.teiid.designer.metamodels.relational.Procedure; import org.teiid.designer.metamodels.relational.Table; import org.teiid.designer.metamodels.relational.View; import org.teiid.designer.roles.ui.Messages; import org.teiid.designer.roles.ui.RolesUiPlugin; import org.teiid.designer.ui.common.util.WidgetFactory; import org.teiid.designer.ui.common.widget.MessageLabel; /** * */ public class SelectObjectDialog extends ElementTreeSelectionDialog implements ISelectionChangedListener { private static final char DELIM = CoreStringUtil.Constants.DOT_CHAR; private static final char B_SLASH = '/'; private Text targetNameText; private String targetName; private MessageLabel statusMessageLabel; private Object input; private ILabelProvider labelProvider; private ITreeContentProvider contentProvider; public SelectObjectDialog( Shell parent, ILabelProvider labelProvider, ITreeContentProvider contentProvider, Object input) { super(parent, labelProvider, contentProvider); this.labelProvider = labelProvider; this.contentProvider = contentProvider; this.input = input; setTitle(Messages.targetSelection); setMessage(Messages.selectTargetForCondition); setInput(input); 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); Group selectedGroup = WidgetFactory.createGroup(panel, "Selected Target", GridData.FILL_HORIZONTAL, 1, 2); //$NON-NLS-1$ this.targetNameText = WidgetFactory.createTextField(selectedGroup, GridData.FILL_HORIZONTAL, Messages.undefined); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.heightHint = convertHeightInCharsToPixels(1); data.verticalAlignment=GridData.CENTER; this.targetNameText.setLayoutData(data); this.targetNameText.setEditable(false); this.targetNameText.setBackground(panel.getBackground()); this.targetNameText.setText(Messages.undefined); 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(Messages.undefined); getTreeViewer().expandToLevel(2); return panel; } /** * {@inheritDoc} * * @see org.eclipse.ui.dialogs.ElementTreeSelectionDialog#createTreeViewer(org.eclipse.swt.widgets.Composite) */ @Override protected TreeViewer createTreeViewer( Composite parent ) { TreeViewer viewer = super.createTreeViewer(parent); viewer.addSelectionChangedListener(this); viewer.getTree().setEnabled(true); viewer.setSorter(new ViewerSorter()); viewer.setFilters(new ViewerFilter[] { new ViewerFilter() { @Override public boolean select( Viewer viewer, Object parentElement, Object element ) { if (element instanceof EObject || element instanceof Resource) { return true; } return false; } } }); viewer.setContentProvider(contentProvider); viewer.setLabelProvider(labelProvider); viewer.setInput(input); return viewer; } @Override public void selectionChanged( SelectionChangedEvent event ) { TreeSelection selection = (TreeSelection)event.getSelection(); if (selection.isEmpty()) { this.targetNameText.setText(Messages.undefined); this.targetName = null; updateOnSelection(null); return; } Object firstElement = selection.getFirstElement(); if (!(firstElement instanceof Table || firstElement instanceof View || firstElement instanceof Procedure )) { this.targetNameText.setText(Messages.undefined); this.targetName = null; } else { EObject target = (EObject)selection.getFirstElement(); targetName = getFullName(target); this.targetNameText.setText(ModelerCore.getModelEditor().getName(target)); } updateOnSelection(firstElement); } private String getFullName(EObject target) { String targetName = getResourceName(target.eResource()) + '/' + ModelerCore.getModelEditor().getModelRelativePath(target); targetName = targetName.replace(B_SLASH, DELIM); return targetName; } /* * Returns the file name only minus the xmi file extension */ private String getResourceName( Resource res ) { if (res.getURI().path().endsWith(".xmi")) { //$NON-NLS-1$ Path path = new Path(res.getURI().path()); return path.removeFileExtension().lastSegment(); } return res.getURI().path(); } private void updateOnSelection( Object selectedObject ) { IStatus status = new Status(IStatus.INFO, RolesUiPlugin.PLUGIN_ID, "Valid column selected. Click OK to finish."); //$NON-NLS-1$ if (selectedObject != null) { if (!(selectedObject instanceof Column)) { status = new Status(IStatus.ERROR, RolesUiPlugin.PLUGIN_ID, "Selected object is not a column"); //$NON-NLS-1$ getOkButton().setEnabled(false); } else { getOkButton().setEnabled(true); } } else { status = new Status(IStatus.ERROR, RolesUiPlugin.PLUGIN_ID, "No column selected"); //$NON-NLS-1$ getOkButton().setEnabled(false); } this.statusMessageLabel.setErrorStatus(status); } /** * Returns the current TeiidTranslator * * @return the TeiidTranslator. may return null */ public String getColumnName() { return this.targetName; } }