package org.teiid.designer.modelgenerator.wsdl.ui.wizards.soap; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Rectangle; 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.Shell; import org.eclipse.swt.widgets.Text; import org.teiid.core.designer.event.IChangeListener; import org.teiid.core.designer.event.IChangeNotifier; import org.teiid.designer.modelgenerator.wsdl.ui.Messages; import org.teiid.designer.modelgenerator.wsdl.ui.ModelGeneratorWsdlUiConstants; import org.teiid.designer.modelgenerator.wsdl.ui.util.ModelGeneratorWsdlUiUtil; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.SelectWsdlOperationsPage; import org.teiid.designer.modelgenerator.wsdl.ui.wizards.WSDLImportWizardManager; 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.DefaultScrolledComposite; import org.teiid.designer.ui.common.wizard.AbstractWizardPage; public class OperationsOptionsPage extends AbstractWizardPage implements IChangeListener, ModelGeneratorWsdlUiConstants, ModelGeneratorWsdlUiConstants.Images { /** <code>IDialogSetting</code>s key for saved dialog height. */ private static final String DIALOG_HEIGHT = "dialogHeight"; //$NON-NLS-1$ /** <code>IDialogSetting</code>s key for saved dialog width. */ private static final String DIALOG_WIDTH = "dialogWidth"; //$NON-NLS-1$ /** <code>IDialogSetting</code>s key for saved dialog X position. */ private static final String DIALOG_X = "dialogX"; //$NON-NLS-1$ /** <code>IDialogSetting</code>s key for saved dialog Y position. */ private static final String DIALOG_Y = "dialogY"; //$NON-NLS-1$ /** The import manager. */ WSDLImportWizardManager importManager; ImportWsdlSoapWizard wizard; Button generateDefaultProceduresButton; Button generateCustomProceduresButton; /** * Constructs the page with the provided import manager * * @param theImportManager * the import manager object */ public OperationsOptionsPage(WSDLImportWizardManager theImportManager, ImportWsdlSoapWizard wizard) { super(SelectWsdlOperationsPage.class.getSimpleName(), Messages.OperationsTypeSelection); this.importManager = theImportManager; this.wizard = wizard; setImageDescriptor(ModelGeneratorWsdlUiUtil.getImageDescriptor(NEW_MODEL_BANNER)); this.importManager.addChangeListener(this); setMessage(Messages.OperationsTypeSelectionMessage); } /** * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) * @since 4.2 */ @Override @SuppressWarnings("unused") public void createControl(Composite theParent) { final Composite hostPanel = new Composite(theParent, SWT.NONE); hostPanel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); hostPanel.setLayout(new GridLayout(1, false)); // Create page DefaultScrolledComposite scrolledComposite = new DefaultScrolledComposite(hostPanel, SWT.H_SCROLL | SWT.V_SCROLL); scrolledComposite.setExpandHorizontal(true); scrolledComposite.setExpandVertical(true); GridLayoutFactory.fillDefaults().equalWidth(false).applyTo(scrolledComposite); GridDataFactory.fillDefaults().grab(true, false); final Composite pnlMain = scrolledComposite.getPanel(); pnlMain.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); pnlMain.setLayout(new GridLayout(1, false)); ((GridData) pnlMain.getLayoutData()).widthHint = 400; GENERATE_PROCEDURE_OPTION: { // Includes a radio button and description for // 1) Generate Default Procedures and // 2) Customize Request & Response Group group = WidgetFactory.createGroup(pnlMain, Messages.ProcedureGenerationOptions, GridData.HORIZONTAL_ALIGN_FILL, 1); GridDataFactory.fillDefaults().grab(true, false).applyTo(group); generateCustomProceduresButton = WidgetFactory.createRadioButton(group, Messages.CustomProcedures, true); generateCustomProceduresButton.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { handleGenerateOptionChanged(); } @Override public void widgetDefaultSelected(SelectionEvent e) { } }); Text customProceduresHelpText = new Text(group, SWT.WRAP | SWT.READ_ONLY); customProceduresHelpText.setBackground(WidgetUtil.getReadOnlyBackgroundColor()); customProceduresHelpText.setForeground(WidgetUtil.getDarkBlueColor()); customProceduresHelpText.setText(Messages.OptionDefineCustomProcures); GridDataFactory.swtDefaults().hint(300, SWT.DEFAULT).align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(customProceduresHelpText); generateDefaultProceduresButton = WidgetFactory.createRadioButton(group, Messages.DefaultProcedures, false); generateDefaultProceduresButton.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { handleGenerateOptionChanged(); } @Override public void widgetDefaultSelected(SelectionEvent e) { } }); Text defaultProceduresHelpText = new Text(group, SWT.WRAP | SWT.READ_ONLY); defaultProceduresHelpText.setBackground(WidgetUtil.getReadOnlyBackgroundColor()); defaultProceduresHelpText.setForeground(WidgetUtil.getDarkBlueColor()); defaultProceduresHelpText.setText(Messages.OptionDefineDefaultProcedures); GridDataFactory.swtDefaults().hint(300, SWT.DEFAULT) .align(SWT.FILL, SWT.FILL).grab(true, true) .applyTo(defaultProceduresHelpText); } scrolledComposite.sizeScrolledPanel(); setControl(hostPanel); } private void handleGenerateOptionChanged() { // need to set the boolean value on importManager and notify the wizard // to update it's pages // to remove Page 3 if generate default is checked this.importManager.setGenerateDefaultProcedures(this.generateDefaultProceduresButton.getSelection()); this.wizard.notifyManagerChanged(); notifyChanged(); } /** * @see org.eclipse.jface.dialogs.IDialogPage#dispose() * @since 4.2 */ @Override public void dispose() { saveState(); } /** * Override to replace the NewModelWizard settings with the section devoted * to the Web Service Model Wizard. * * @see org.eclipse.jface.wizard.WizardPage#getDialogSettings() * @since 4.2 */ @Override protected IDialogSettings getDialogSettings() { IDialogSettings settings = super.getDialogSettings(); if (settings != null) { // get the right section of the NewModelWizard settings IDialogSettings temp = settings.getSection(DIALOG_SETTINGS_SECTION); if (temp == null) { settings = settings.addNewSection(DIALOG_SETTINGS_SECTION); } else { settings = temp; } } return settings; } /** * Persists dialog size and position. * * @since 4.2 */ private void saveState() { IDialogSettings settings = getDialogSettings(); if (settings != null) { Shell shell = getContainer().getShell(); if (shell != null) { Rectangle r = shell.getBounds(); settings.put(DIALOG_X, r.x); settings.put(DIALOG_Y, r.y); settings.put(DIALOG_WIDTH, r.width); settings.put(DIALOG_HEIGHT, r.height); } } } /** * Sets the wizard page status message. * * @since 4.2 */ void setPageStatus() { // Check importOptionsPanel status IStatus modelStatus = this.importManager.getValidator() .getModelsStatus(); if (modelStatus.getSeverity() == IStatus.OK) { WizardUtil.setPageComplete(this); this.setMessage(modelStatus.getMessage()); } else { WizardUtil.setPageComplete(this, this.importManager.getValidator().getPrimaryMessage(modelStatus), WizardUtil.getMessageSeverity(modelStatus.getSeverity())); } getContainer().updateButtons(); } @Override public void setVisible(boolean isVisible) { super.setVisible(isVisible); if (isVisible) { this.importManager.validate(); this.generateDefaultProceduresButton.setSelection(this.importManager.doGenerateDefaultProcedures()); this.generateCustomProceduresButton.setSelection(!this.importManager.doGenerateDefaultProcedures()); setPageStatus(); // getControl().pack(true); } } public void updateDesignerProperties() { } /* * (non-Javadoc) * * @see * com.metamatrix.core.event.IChangeListener#stateChanged(com.metamatrix * .core.event.IChangeNotifier) */ @Override public void stateChanged(IChangeNotifier theSource) { setPageStatus(); } public void notifyChanged() { this.importManager.notifyChanged(); } }