package org.teiid.designer.transformation.ui.wizards.jdg; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IStatus; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; 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.Group; import org.eclipse.swt.widgets.Text; import org.teiid.core.designer.util.StringUtilities; import org.teiid.designer.core.workspace.ModelWorkspaceException; import org.teiid.designer.transformation.materialization.MaterializedModelManager; 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.util.WidgetUtil; import org.teiid.designer.ui.common.widget.DefaultScrolledComposite; import org.teiid.designer.ui.common.widget.Label; import org.teiid.designer.ui.common.wizard.AbstractWizardPage; import org.teiid.designer.ui.viewsupport.ModelProjectSelectionStatusValidator; import org.teiid.designer.ui.viewsupport.SingleProjectOrFolderFilter; public class MaterializationWizardPage_1 extends AbstractWizardPage implements UiConstants { private boolean synchronizing; Text modelNameField; Text locationField; Label locationLabel; private MaterializedModelManager manager; public MaterializationWizardPage_1(MaterializedModelManager generator) { super(MaterializationWizardPage_1.class.getSimpleName(), Messages.MaterializationWizardPage_1_Title); this.manager = generator; } @Override public void createControl(Composite parent) { final Composite hostPanel = new Composite(parent, SWT.NONE); hostPanel.setLayout(new GridLayout(1, false)); hostPanel.setLayoutData(new GridData(GridData.FILL_BOTH)); // Create page DefaultScrolledComposite scrolledComposite = new DefaultScrolledComposite(hostPanel); hostPanel.setLayout(new GridLayout(1, false)); hostPanel.setLayoutData(new GridData(GridData.FILL_BOTH)); final Composite mainPanel = scrolledComposite.getPanel(); mainPanel.setLayoutData(new GridData(GridData.FILL_BOTH)); mainPanel.setLayout(new GridLayout(1, false)); // Add widgets to page Group viewPanel = WidgetFactory.createGroup(mainPanel, Messages.MaterializationWizardPage_1_ViewModelGroupName, SWT.NONE, 1, 2); viewPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); ((GridLayout)viewPanel.getLayout()).marginLeft = 10; ((GridLayout)viewPanel.getLayout()).marginRight = 10; Label vModelLabel = WidgetFactory.createLabel(viewPanel, Messages.MaterializationWizardPage_1_Name); vModelLabel.setImage(UiPlugin.getDefault().getImage(UiConstants.Images.VIRTUAL_RELATIONAL_TABLE)); ((GridData)vModelLabel.getLayoutData()).verticalAlignment = GridData.CENTER; vModelLabel.setImage(UiPlugin.getDefault().getImage(UiConstants.Images.VIEW_MODEL)); Text virtualModelField = WidgetFactory.createTextField(viewPanel); virtualModelField.setText(manager.getMaterializedViewModel().getItemName()); virtualModelField.setEditable(false); virtualModelField.setBackground(viewPanel.getBackground()); virtualModelField.setForeground(GlobalUiColorManager.EMPHASIS_COLOR); virtualModelField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label vTableLabel = WidgetFactory.createLabel(viewPanel, Messages.MaterializationWizardPage_1_SelectedView); vTableLabel.setImage(UiPlugin.getDefault().getImage(UiConstants.Images.VIRTUAL_RELATIONAL_TABLE)); ((GridData)vTableLabel.getLayoutData()).verticalAlignment = GridData.CENTER; Text virtualTableField = WidgetFactory.createTextField(viewPanel); virtualTableField.setText(manager.getVirtualTable().getName()); virtualTableField.setEditable(false); virtualTableField.setBackground(viewPanel.getBackground()); virtualTableField.setForeground(GlobalUiColorManager.EMPHASIS_COLOR); virtualTableField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); /* This page needs to dislpay and control * * 1) The selected view (Label + Text) * 2) Materialized Source model (Label + Text) * 3) */ // Add widgets to page Group theGroup = WidgetFactory.createGroup(mainPanel, Messages.MaterializationWizardPage_1_GroupName, SWT.NONE, 1, 3); theGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); ((GridLayout)theGroup.getLayout()).marginLeft = 10; ((GridLayout)theGroup.getLayout()).marginRight = 10; Label label = WidgetFactory.createLabel(theGroup, Messages.MaterializationWizardPage_1_SourceModelName); label.setToolTipText(Messages.MaterializationWizardPage_1_SourceModelNameTooltip); ((GridData)label.getLayoutData()).verticalAlignment = GridData.CENTER; label.setImage(UiPlugin.getDefault().getImage(UiConstants.Images.SOURCE_MODEL)); this.modelNameField = WidgetFactory.createTextField(theGroup); this.modelNameField.setToolTipText(Messages.MaterializationWizardPage_1_SourceModelNameTooltip); String modelName = manager.getMaterializedSourceModelName(); if( ! StringUtilities.isEmpty(modelName) ) { this.modelNameField.setText(modelName); } this.modelNameField.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); ((GridData)this.modelNameField.getLayoutData()).horizontalSpan = 2; ((GridData)this.modelNameField.getLayoutData()).verticalAlignment = GridData.CENTER; // GridDataFactory.swtDefaults().grab(true, true).applyTo(modelNameField); this.modelNameField.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { if( synchronizing ) return; String modelName = modelNameField.getText(); if( ! StringUtilities.isEmpty(modelName) ) { manager.setMaterializedSourceModelName(modelName); } else { modelName = ""; //$NON-NLS-1$ manager.setMaterializedSourceModelName(modelName); } validate(); } }); // Instruction label. locationLabel = new Label(theGroup, SWT.NULL); locationLabel.setText(Messages.MaterializationWizardPage_1_SourceModelLocationLabel); locationLabel.setImage(UiPlugin.getDefault().getImage(UiConstants.Images.OPEN_FOLDER)); locationField = new Text(theGroup, SWT.BORDER | SWT.SINGLE); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.verticalAlignment = GridData.CENTER; locationField.setLayoutData(gd); locationField.setText(manager.getTargetLocation().getName()); locationField.addModifyListener(new ModifyListener() { @Override public void modifyText( ModifyEvent e ) { validate(); } }); locationField.setEditable(false); Button browseButton = new Button(theGroup, SWT.PUSH); GridData buttonGridData = new GridData(); browseButton.setLayoutData(buttonGridData); browseButton.setText("..."); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected( SelectionEvent e ) { try { handleBrowse(); } catch (ModelWorkspaceException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); scrolledComposite.sizeScrolledPanel(); setControl(hostPanel); setMessage(Messages.MaterializationWizardPage_1_Message); setPageComplete(true); } /** * Uses the standard container selection dialog to choose the new value for the container field. * @throws ModelWorkspaceException */ void handleBrowse() throws ModelWorkspaceException { IContainer folder = WidgetUtil.showFolderSelectionDialog(this.manager.getProject(), new SingleProjectOrFolderFilter(this.manager.getProject()), new ModelProjectSelectionStatusValidator()); if (folder != null && locationField != null) { locationField.setText(folder.getFullPath().makeRelative().toString()); this.manager.setTargetLocation(folder); } synchronizeUI(); } @Override public void setVisible(boolean visible) { super.setVisible(visible); if (visible) { synchronizeUI(); } } void validate() { IStatus status = manager.validate(1); if( status.isOK() ) { setErrorMessage(null); setMessage(Messages.MaterializationWizardPage_2_ClickFinish_MaterializeOnly); setPageComplete(true); } else if( status.getSeverity() == IStatus.WARNING) { setErrorMessage(null); setMessage(status.getMessage(), IStatus.WARNING); setPageComplete(true); } else { setErrorMessage(status.getMessage()); setPageComplete(false); } } void synchronizeUI(){ synchronizing = true; // Set image for location IContainer location = this.manager.getTargetLocation(); if( location != null && location instanceof IProject ) { locationField.setText(location.getFullPath().makeRelative().toString()); locationLabel.setImage(UiPlugin.getDefault().getImage(UiConstants.Images.MODEL_PROJECT)); } else { locationField.setText(location.getFullPath().makeRelative().toString()); locationLabel.setImage(UiPlugin.getDefault().getImage(UiConstants.Images.OPEN_FOLDER)); } synchronizing = false; } }