/* * 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.runtime.ui.wizards.vdbs; import java.util.ArrayList; import java.util.Collection; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.ListViewer; 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.StringConstants; import org.teiid.designer.runtime.ui.DqpUiConstants; import org.teiid.designer.runtime.ui.Messages; 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.util.WizardUtil; 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; import org.teiid.designer.vdb.Vdb; import org.teiid.designer.vdb.dynamic.DynamicModel; /** * Page 2 of Generate Archive Wizard */ public class GenerateArchiveVdbPageTwo extends AbstractWizardPage implements DqpUiConstants, StringConstants { private Text ouputVdbNameFld; private Text vdbArchiveFileNameFld; private Label vdbArchiveLocationText; private ListViewer sourceModelsViewer; private ListViewer viewModelsViewer; private Button ddlAsDescriptionOption; private Button generateButton; private final GenerateArchiveVdbManager vdbManager; /** * ShowDDlPage constructor * @param vdbManager the Manager * @since 8.1 */ public GenerateArchiveVdbPageTwo(GenerateArchiveVdbManager vdbManager) { super(GenerateArchiveVdbPageTwo.class.getSimpleName(), EMPTY_STRING); this.vdbManager = vdbManager; setTitle(Messages.GenerateArchiveVdbPageTwo_title); } @Override public void createControl(Composite parent) { // Create page final Composite mainPanel = new Composite(parent, SWT.NONE); mainPanel.setLayout(new GridLayout(2, false)); mainPanel.setLayoutData(new GridData()); mainPanel.setSize(mainPanel.computeSize(SWT.DEFAULT, SWT.DEFAULT)); setControl(mainPanel); createHeaderPanel(mainPanel); // Create Source Models List group //$NON-NLS-1$ createSourceModelsGroup(mainPanel); createViewModelsGroup(mainPanel); createGenerateButtonPanel(mainPanel); setPageComplete(false); } private void createHeaderPanel(Composite parent) { Composite vdbInfoGroup = WidgetFactory.createGroup(parent, Messages.GenerateArchiveVdbPageTwo_vdbDetails, GridData.FILL_HORIZONTAL); vdbInfoGroup.setLayout(new GridLayout(3, false)); GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(vdbInfoGroup); WidgetFactory.createLabel(vdbInfoGroup, GridData.VERTICAL_ALIGN_CENTER, Messages.GenerateArchiveVdbPageTwo_originalVdbName); Label vdbNameFld = new Label(vdbInfoGroup, SWT.NONE); GridDataFactory.fillDefaults().span(2, 1).grab(true, false).applyTo(vdbNameFld); vdbNameFld.setText(vdbManager.getDynamicVdb().getName()); vdbNameFld.setForeground(GlobalUiColorManager.EMPHASIS_COLOR); Label locationLabel = new Label(vdbInfoGroup, SWT.NONE); locationLabel.setText(Messages.GenerateArchiveVdbPageTwo_location); vdbArchiveLocationText = new Label(vdbInfoGroup, SWT.NONE); GridDataFactory.fillDefaults().grab(true, false).applyTo(vdbArchiveLocationText); if (vdbManager.getOutputLocation() != null) { vdbArchiveLocationText.setText(vdbManager.getOutputLocation().getFullPath().toString()); } Button browseButton = new Button(vdbInfoGroup, SWT.PUSH); GridData buttonGridData = new GridData(); browseButton.setLayoutData(buttonGridData); browseButton.setText(Messages.GenerateArchiveVdbPageTwo_browse); browseButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { handleBrowse(); } }); Label vdbVersionLabel = WidgetFactory.createLabel(vdbInfoGroup, Messages.GenerateArchiveVdbPageTwo_version); GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.CENTER).applyTo(vdbVersionLabel); final Text vdbVersionText = WidgetFactory.createTextField(vdbInfoGroup); vdbVersionText.setText(vdbManager.getDynamicVdb().getVersion()); GridDataFactory.fillDefaults().span(2, 1).align(SWT.LEFT, SWT.CENTER).applyTo(vdbVersionText); ((GridData)vdbVersionText.getLayoutData()).widthHint = 40; vdbVersionText.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { vdbManager.setVersion(vdbVersionText.getText()); validatePage(); } }); WidgetFactory.createLabel(vdbInfoGroup, GridData.VERTICAL_ALIGN_CENTER, Messages.GenerateArchiveVdbPageTwo_archiveVdbName); ouputVdbNameFld = WidgetFactory.createTextField(vdbInfoGroup, SWT.NONE, GridData.FILL_HORIZONTAL); GridDataFactory.fillDefaults().span(2, 1).grab(true, false).applyTo(ouputVdbNameFld); ouputVdbNameFld.setText(vdbManager.getOutputVdbName()); ouputVdbNameFld.setToolTipText(Messages.GenerateArchiveVdbPageTwo_archiveVdbNameTooltip); ouputVdbNameFld.addModifyListener(new ModifyListener() { @Override public void modifyText(final ModifyEvent event) { vdbManager.setOutputVdbName(ouputVdbNameFld.getText()); validatePage(); } }); WidgetFactory.createLabel(vdbInfoGroup, GridData.VERTICAL_ALIGN_CENTER, Messages.GenerateArchiveVdbPageTwo_vdbArchiveFileName); vdbArchiveFileNameFld = WidgetFactory.createTextField(vdbInfoGroup, SWT.NONE, GridData.FILL_HORIZONTAL); GridDataFactory.fillDefaults().span(2, 1).grab(true, false).applyTo(vdbArchiveFileNameFld); vdbArchiveFileNameFld.setText(vdbManager.getOutputVdbFileName()); vdbArchiveFileNameFld.setToolTipText(Messages.GenerateArchiveVdbPageTwo_vdbArchiveFileNameTooltip); vdbArchiveFileNameFld.addModifyListener(new ModifyListener() { @Override public void modifyText(final ModifyEvent event) { vdbManager.setOutputVdbFileName(vdbArchiveFileNameFld.getText()); validatePage(); } }); // Spacer component new Label(vdbInfoGroup, SWT.SEPARATOR | SWT.HORIZONTAL); ddlAsDescriptionOption = WidgetFactory.createButton(vdbInfoGroup, Messages.GenerateArchiveVdbPageTwo_ddlAsDescriptionOptionLabel, GridData.FILL_HORIZONTAL, 2, SWT.CHECK); GridDataFactory.fillDefaults().span(2, 1).grab(true, false).applyTo(ddlAsDescriptionOption); ddlAsDescriptionOption.setToolTipText(Messages.GenerateArchiveVdbPageTwo_ddlAsDescriptionOptionTooltip); ddlAsDescriptionOption.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { vdbManager.addConversionOption(Vdb.SET_DDL_AS_DESCRIPTION, Boolean.toString(ddlAsDescriptionOption.getSelection())); } }); } private void createSourceModelsGroup(Composite parent) { Group group = WidgetFactory.createGroup(parent, Messages.GenerateArchiveVdbPageTwo_sourceModels, SWT.FILL, 1, 1); GridLayoutFactory.fillDefaults().margins(10, 10).applyTo(group); GridData gd_2 = new GridData(GridData.FILL_BOTH); gd_2.widthHint = 220; group.setLayoutData(gd_2); // Add a simple list box entry form with String contents this.sourceModelsViewer = new ListViewer(group, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); GridData data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 1; this.sourceModelsViewer.getControl().setLayoutData(data); for (Object model : getSourceModels()) { this.sourceModelsViewer.add(model); } } private void createViewModelsGroup(Composite parent) { Group group = WidgetFactory.createGroup(parent, Messages.GenerateArchiveVdbPageTwo_viewModels, SWT.FILL, 1, 1); GridLayoutFactory.fillDefaults().margins(10, 10).applyTo(group); GridData gd_2 = new GridData(GridData.FILL_BOTH); gd_2.widthHint = 220; group.setLayoutData(gd_2); // Add a simple list box entry form with String contents this.viewModelsViewer = new ListViewer(group, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); GridData data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 1; this.viewModelsViewer.getControl().setLayoutData(data); for (Object model : getViewModels()) { this.viewModelsViewer.add(model); } } private void createGenerateButtonPanel(Composite parent) { Composite buttonPanel = new Composite(parent, SWT.NONE); GridDataFactory.fillDefaults().span(2, 1).grab(true, false).applyTo(buttonPanel); GridLayoutFactory.fillDefaults().numColumns(2).margins(50, 10).applyTo(buttonPanel); final Button overwriteExistingOption = WidgetFactory.createButton(buttonPanel, Messages.GenerateArchiveVdbPageTwo_overwriteFilesOptionLabel, GridData.FILL_HORIZONTAL, 2, SWT.CHECK); overwriteExistingOption.setSelection(vdbManager.overwriteExistingFiles()); GridDataFactory.fillDefaults().span(1, 1).grab(true, false).applyTo(overwriteExistingOption); overwriteExistingOption.setToolTipText(Messages.GenerateArchiveVdbPageTwo_overwriteVDBAndModelsOptionTooltip); overwriteExistingOption.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { vdbManager.setOverwriteExistingFiles(overwriteExistingOption.getSelection()); validatePage(); } }); generateButton = new Button(buttonPanel, SWT.PUSH); GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).grab(true, true).applyTo(generateButton); generateButton.setText(Messages.GenerateVdbButton_Title); generateButton.setToolTipText(Messages.GenerateVdbButton_Tooltip); generateButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { vdbManager.generate(); generateButton.setEnabled(vdbManager.isGenerateRequired() ); validatePage(); } }); } @Override public void setVisible(boolean visible) { if (visible) validatePage(); super.setVisible(visible); } /* * Validate the page */ private void validatePage() { this.vdbManager.validate(); IStatus status = vdbManager.getStatus(); if (status.getSeverity() == IStatus.ERROR) { this.setErrorMessage(status.getMessage()); this.setPageComplete(false); generateButton.setEnabled(false); return; } else if (status.getSeverity() == IStatus.WARNING) { setErrorMessage(null); setMessage(Messages.GenerateArchiveVdbPageTwo_clickFinishToSaveVdbAndModels, NONE); this.setPageComplete(true); generateButton.setEnabled(vdbManager.isGenerateRequired() ); } else { setErrorMessage(null); // WizardUtil.setPageComplete(this, EMPTY_STRING, NONE); generateButton.setEnabled(vdbManager.isGenerateRequired() ); setErrorMessage(null); setMessage(Messages.GenerateArchiveVdbPageTwo_clickFinishToSaveVdbAndModels, NONE); this.setPageComplete(true); } } Object[] getSourceModels() { Collection<String> modelNames = new ArrayList<String>(); for (DynamicModel model : vdbManager.getDynamicVdb().getDynamicModels()) { if (model.getModelType() == DynamicModel.Type.PHYSICAL) { modelNames.add(model.getName()); } } return modelNames.toArray(); } Object[] getViewModels() { Collection<String> modelNames = new ArrayList<String>(); for (DynamicModel model : vdbManager.getDynamicVdb().getDynamicModels()) { if (model.getModelType() == DynamicModel.Type.VIRTUAL) { modelNames.add(model.getName()); } } return modelNames.toArray(); } void handleBrowse() { IProject project = vdbManager.getDynamicVdbFile().getProject(); final IContainer folder = WidgetUtil.showFolderSelectionDialog(project, new SingleProjectOrFolderFilter(project), new ModelProjectSelectionStatusValidator()); if (folder != null && vdbArchiveLocationText != null) { vdbManager.setOutputLocation(folder); vdbArchiveLocationText.setText(folder.getFullPath().makeRelative().toString()); } validatePage(); } @Override public boolean isPageComplete() { if (vdbManager.isGenerateRequired()) return false; return super.isPageComplete(); } @Override public boolean canFlipToNextPage() { if (vdbManager.isGenerateRequired()) return false; return super.canFlipToNextPage(); } }