/* * 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.transformation.ui.wizards.functions; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; 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.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.ISelectionStatusValidator; import org.teiid.core.designer.util.I18nUtil; import org.teiid.designer.core.workspace.ModelResource; import org.teiid.designer.core.workspace.ModelUtil; import org.teiid.designer.core.workspace.ModelWorkspaceException; import org.teiid.designer.metamodels.core.ModelType; import org.teiid.designer.metamodels.relational.RelationalPackage; import org.teiid.designer.relational.model.RelationalViewProcedure; import org.teiid.designer.transformation.ui.UiConstants; import org.teiid.designer.transformation.ui.UiPlugin; import org.teiid.designer.ui.common.graphics.GlobalUiColorManager; import org.teiid.designer.ui.common.util.WidgetFactory; import org.teiid.designer.ui.common.viewsupport.StatusInfo; import org.teiid.designer.ui.viewsupport.ModelSelectorDialog; import org.teiid.designer.ui.viewsupport.ModelSelectorInfo; import org.teiid.designer.ui.viewsupport.ModelWorkspaceViewerFilter; public class ConvertFunctionModelDialog extends TitleAreaDialog { private static final String I18N_PREFIX = I18nUtil.getPropertyPrefix(ConvertFunctionModelDialog.class); private final String TITLE = getString("title"); //$NON-NLS-1$ private static String getString(final String id) { return UiConstants.Util.getString(I18N_PREFIX + id); } //============================================================= // Instance variables //============================================================= private ConvertFunctionModelHelper helper; private TableViewer listViewer; private Button browseModelButton; private Text modelNameText; //============================================================= // Constructors //============================================================= /** * ParsedDataRowDialog constructor. * * @param parent parent of this dialog * @param fileInfo the flat file business object * @param stringToParse the data string to parse */ public ConvertFunctionModelDialog(Shell parent, ConvertFunctionModelHelper helper) { super(parent); this.helper = helper; } @Override protected void configureShell( Shell shell ) { super.configureShell(shell); shell.setText(TITLE); } /* (non-Javadoc) * @see org.eclipse.jface.window.Window#setShellStyle(int) */ @Override protected void setShellStyle( int newShellStyle ) { super.setShellStyle(newShellStyle | SWT.RESIZE | SWT.MAX); } //============================================================= // Instance methods //============================================================= @Override protected Control createDialogArea(Composite parent) { setTitle(TITLE); setMessage(getString("titleMessage")); //$NON-NLS-1$ Composite composite = (Composite)super.createDialogArea(parent); //------------------------------ // Set layout for the Composite //------------------------------ GridLayout gridLayout = new GridLayout(); composite.setLayout(gridLayout); gridLayout.numColumns = 1; GridData gridData = new GridData(GridData.FILL_BOTH); gridData.grabExcessHorizontalSpace = true; gridData.widthHint = 500; composite.setLayoutData(gridData); createFunctionListViewerGroup(composite); createTargetModelGroup(composite); return composite; } private void createFunctionListViewerGroup(Composite parent) { Group theGroup = WidgetFactory.createGroup(parent, getString("selectFunctions"), SWT.NONE, 1, 2); //$NON-NLS-1$ GridData groupGD = new GridData(GridData.FILL_HORIZONTAL); groupGD.horizontalSpan = 1; theGroup.setLayoutData(groupGD); Table table = new Table(theGroup, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.CHECK); table.setHeaderVisible(false); table.setLinesVisible(true); table.setLayout(new TableLayout()); this.listViewer = new TableViewer(table); GridDataFactory.fillDefaults().grab(true, false).hint(SWT.DEFAULT, 100).span(2, 1).applyTo(this.listViewer.getControl()); this.listViewer.setContentProvider(new ITreeContentProvider() { @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // TODO Auto-generated method stub } @Override public void dispose() { // TODO Auto-generated method stub } @Override public boolean hasChildren(Object element) { return ! (helper.getVirtualFunctions().length > 0); } @Override public Object getParent(Object element) { return null; } @Override public Object[] getElements(Object inputElement) { if( inputElement instanceof ConvertFunctionModelHelper ) { return helper.getVirtualFunctions(); } return new Object[0]; } @Override public Object[] getChildren(Object parentElement) { // TODO Auto-generated method stub return new Object[0]; } }); FunctionProvider provider = new FunctionProvider(); listViewer.setContentProvider(provider); listViewer.setLabelProvider(provider); listViewer.setInput(helper); listViewer.getTable().addSelectionListener( new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { if( e.detail != SWT.CHECK ) return; helper.clearFunctions(); for( TableItem item : listViewer.getTable().getItems() ) { if( item.getChecked() ) { helper.selectFunction((RelationalViewProcedure)item.getData()); } } setDialogStatus(); } @Override public void widgetDefaultSelected(SelectionEvent e) { } }); } private void createTargetModelGroup(Composite parent) { Group theGroup = WidgetFactory.createGroup(parent, getString("targetModelGroupName"), SWT.NONE, 1, 3); //$NON-NLS-1$ GridData groupGD = new GridData(GridData.FILL_HORIZONTAL); groupGD.horizontalSpan = 1; theGroup.setLayoutData(groupGD); Label selectedFileLabel = new Label(theGroup, SWT.NONE); selectedFileLabel.setText(getString("name")); //$NON-NLS-1$ modelNameText = new Text(theGroup, SWT.BORDER | SWT.SINGLE); modelNameText.setEditable(false); modelNameText.setBackground(GlobalUiColorManager.getSystemColor(SWT.COLOR_WIDGET_LIGHT_SHADOW)); GridDataFactory.fillDefaults().grab(true, false).applyTo(modelNameText); // source browse button browseModelButton = new Button(theGroup, SWT.PUSH); browseModelButton.setText("..."); //$NON-NLS-1$ browseModelButton.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { handleModelFolderBrowseButtonPressed(); } @Override public void widgetDefaultSelected(SelectionEvent e) { } }); browseModelButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL)); browseModelButton.setFont(parent.getFont()); GridDataFactory.fillDefaults().minSize(30, 16).applyTo(browseModelButton); } /** * Opens a container selection dialog and displays the user's subsequent container resource selection in this page's container * name field. */ protected void handleModelFolderBrowseButtonPressed() { // ================================== // launch Location chooser // ================================== ModelSelectorInfo newModelInfo = new ModelSelectorInfo( getString("modelNameDialogTitle"), //$NON-NLS-1$ ModelType.VIRTUAL_LITERAL, RelationalPackage.eNS_URI, getString("modelNameDialogNewName"), //$NON-NLS-1$ getString("modelNameDialogMessage"));//$NON-NLS-1$ ModelSelectorDialog mwdDialog = new ModelSelectorDialog(this.getShell(), newModelInfo); mwdDialog.addFilter(new ModelWorkspaceViewerFilter(true)); mwdDialog.setValidator(new ISelectionStatusValidator() { @Override public IStatus validate( Object[] selection ) { if (selection == null) { return new StatusInfo(UiPlugin.PLUGIN_ID, IStatus.ERROR, getString("modelNameDialogNoModelSelected")); } else if (selection.length != 1) { return new StatusInfo(UiPlugin.PLUGIN_ID, IStatus.ERROR, getString("modelNameDialogMultipleSelection")); } else if (!(selection[0] instanceof IFile)) { return new StatusInfo(UiPlugin.PLUGIN_ID, IStatus.ERROR, getString("modelNameDialogNoModelSelected")); } else { return new StatusInfo(UiPlugin.PLUGIN_ID); } } }); mwdDialog.setAllowMultiple(false); mwdDialog.open(); if (mwdDialog.getReturnCode() == Window.OK) { Object[] selectedObjects = mwdDialog.getResult(); if (selectedObjects.length > 0 && selectedObjects[0] instanceof IFile) { IFile theFile = (IFile)selectedObjects[0]; ModelResource targetModel = null; if (theFile != null) { try { targetModel = ModelUtil.getModelResource(theFile, false); } catch (ModelWorkspaceException theException) { UiConstants.Util.log(theException); } } if (targetModel != null) { helper.setTargetModel(targetModel); modelNameText.setText(targetModel.getPath().toOSString()); } } } setDialogStatus(); } private void setDialogStatus() { IStatus status = helper.getStatus(); if( status.getSeverity() == IStatus.ERROR) { setErrorMessage(status.getMessage()); getButton(OK).setEnabled(false); } else { setErrorMessage(null); setMessage(status.getMessage(), status.getSeverity()); getButton(OK).setEnabled(true); } } class FunctionProvider extends ColumnLabelProvider implements ITreeContentProvider { @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { // TODO Auto-generated method stub } @Override public void dispose() { // TODO Auto-generated method stub } @Override public boolean hasChildren(Object element) { return ! (helper.getVirtualFunctions().length > 0); } @Override public Object getParent(Object element) { return null; } @Override public Object[] getElements(Object inputElement) { if( inputElement instanceof ConvertFunctionModelHelper ) { return helper.getVirtualFunctions(); } return new Object[0]; } @Override public Object[] getChildren(Object parentElement) { // TODO Auto-generated method stub return new Object[0]; } @Override public Image getImage(Object element) { // TODO Auto-generated method stub return null; } @Override public String getText(Object element) { if( element instanceof RelationalViewProcedure ) { return ((RelationalViewProcedure)element).getName(); } return null; } } }